#include <metal_stdlib>

using namespace metal;
struct main_out {
  int x_4_1;
};
struct tint_symbol_2 {
  int x_3_param [[user(locn0)]];
};
struct tint_symbol_3 {
  int x_4_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_6, thread int* const tint_symbol_7, thread int* const tint_symbol_8) {
  int x_33_phi = 0;
  float4 const x_18 = *(tint_symbol_6);
  int const x_28 = *(tint_symbol_7);
  x_33_phi = 0;
  if (((((int(x_18.x) & 1) + (int(x_18.y) & 1)) + x_28) == int(x_18.z))) {
    while (true) {
      int x_34 = 0;
      int const x_33 = x_33_phi;
      if ((as_type<uint>(x_33) < as_type<uint>(10))) {
      } else {
        break;
      }
      {
        x_34 = (x_33 + 1);
        x_33_phi = x_34;
      }
    }
  }
  *(tint_symbol_8) = 1;
  return;
}

fragment tint_symbol_3 tint_symbol(float4 x_2_param [[position]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread int tint_symbol_10 = 0;
  thread int tint_symbol_11 = 0;
  int const x_3_param = tint_symbol_1.x_3_param;
  tint_symbol_9 = x_2_param;
  tint_symbol_10 = x_3_param;
  main_1(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
  main_out const tint_symbol_4 = {.x_4_1=tint_symbol_11};
  tint_symbol_3 const tint_symbol_5 = {.x_4_1=tint_symbol_4.x_4_1};
  return tint_symbol_5;
}

