#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct doesNotMatter {
  /* 0x0000 */ uint x_compute_data[1];
};

void main_1(constant buf0& x_9, device doesNotMatter& x_12, thread float4* const tint_symbol_1) {
  int GLF_live2_looplimiter1 = 0;
  int i = 0;
  int j = 0;
  float GLF_dead3x = 0.0f;
  float x_51 = 0.0f;
  int GLF_dead3k = 0;
  GLF_live2_looplimiter1 = 0;
  i = 0;
  while (true) {
    int const x_56 = i;
    if ((x_56 < 1)) {
    } else {
      break;
    }
    int const x_59 = GLF_live2_looplimiter1;
    if ((x_59 >= 3)) {
      j = 0;
      while (true) {
        int const x_67 = j;
        if ((x_67 < 1)) {
        } else {
          break;
        }
        float const x_13 = (*(tint_symbol_1)).x;
        if ((int(x_13) < 120)) {
        } else {
          threadgroup_barrier(mem_flags::mem_threadgroup);
        }
        {
          int const x_76 = j;
          j = (x_76 + 1);
        }
      }
      break;
    }
    {
      int const x_78 = i;
      i = (x_78 + 1);
    }
  }
  float const x_81 = x_9.injectionSwitch.x;
  float const x_83 = x_9.injectionSwitch.y;
  if ((x_81 > x_83)) {
    float const x_14 = (*(tint_symbol_1)).x;
    x_51 = x_14;
  } else {
    x_51 = 0.0f;
  }
  float const x_15 = x_51;
  GLF_dead3x = x_15;
  GLF_dead3k = 0;
  while (true) {
    int const x_93 = GLF_dead3k;
    if ((x_93 < 2)) {
    } else {
      break;
    }
    float const x_96 = GLF_dead3x;
    if ((x_96 > 4.0f)) {
      break;
    }
    float const x_16 = (*(tint_symbol_1)).x;
    GLF_dead3x = x_16;
    threadgroup_barrier(mem_flags::mem_threadgroup);
    {
      int const x_101 = GLF_dead3k;
      GLF_dead3k = (x_101 + 1);
    }
  }
  x_12.x_compute_data[0] = 42u;
  return;
}

kernel void tint_symbol(constant buf0& x_9 [[buffer(1)]], device doesNotMatter& x_12 [[buffer(0)]]) {
  thread float4 tint_symbol_2 = 0.0f;
  main_1(x_9, x_12, &(tint_symbol_2));
  return;
}

