#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ float three;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

float func_(constant buf0& x_7) {
  float b = 0.0f;
  float x_34 = 0.0f;
  float x_34_phi = 0.0f;
  float x_48_phi = 0.0f;
  b = 2.0f;
  x_34_phi = 2.0f;
  while (true) {
    x_34 = x_34_phi;
    float const x_39 = x_7.three;
    if ((x_39 == 0.0f)) {
      x_48_phi = x_34;
      break;
    }
    float const x_44 = x_7.three;
    if ((x_44 == 0.0f)) {
      return 1.0f;
    }
    b = 1.0f;
    {
      x_34_phi = 1.0f;
      x_48_phi = 1.0f;
      if (false) {
      } else {
        break;
      }
    }
  }
  float const x_48 = x_48_phi;
  return x_48;
}

void main_1(constant buf0& x_7, thread float4* const tint_symbol_4) {
  float const x_27 = func_(x_7);
  if ((x_27 == 1.0f)) {
    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_7, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

