#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  uint arr[2];
};
struct S {
  uint field0;
  float field1;
  tint_array_wrapper field2;
};

void main_1(thread bool* const tint_symbol_1, thread bool* const tint_symbol_2, thread uint* const tint_symbol_3) {
  bool const x_101 = *(tint_symbol_1);
  bool const x_102 = *(tint_symbol_2);
  while (true) {
    uint x_2_phi = 0u;
    if (x_101) {
      break;
    }
    if (x_102) {
      x_2_phi = 0u;
      {
        uint const x_2 = x_2_phi;
        *(tint_symbol_3) = x_2;
      }
      continue;
    } else {
      x_2_phi = 1u;
      {
        uint const x_2 = x_2_phi;
        *(tint_symbol_3) = x_2;
      }
      continue;
    }
    x_2_phi = 0u;
    {
      uint const x_2 = x_2_phi;
      *(tint_symbol_3) = x_2;
    }
  }
  return;
}

fragment void tint_symbol() {
  thread bool tint_symbol_4 = false;
  thread bool tint_symbol_5 = false;
  thread uint tint_symbol_6 = 0u;
  main_1(&(tint_symbol_4), &(tint_symbol_5), &(tint_symbol_6));
  return;
}

