#include <metal_stdlib>

using namespace metal;
struct theSSBO {
  /* 0x0000 */ int out_data;
};

void main_1(device theSSBO& x_4) {
  float2x2 x_30 = float2x2(0.0f);
  float2x2 x_30_phi = float2x2(0.0f);
  int x_32_phi = 0;
  x_4.out_data = 42;
  x_30_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
  x_32_phi = 1;
  while (true) {
    int x_33 = 0;
    x_30 = x_30_phi;
    int const x_32 = x_32_phi;
    if ((x_32 > 0)) {
    } else {
      break;
    }
    {
      x_33 = (x_32 - 1);
      x_30_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
      x_32_phi = x_33;
    }
  }
  float2 const x_41 = (float2(1.0f, 1.0f) * float2x2((x_30[0u] - float2(1.0f, 0.0f)), (x_30[1u] - float2(0.0f, 1.0f))));
  while (true) {
    if ((1.0f < x_41.x)) {
      break;
    }
    threadgroup_barrier(mem_flags::mem_threadgroup);
    break;
  }
  return;
}

kernel void tint_symbol(device theSSBO& x_4 [[buffer(0)]]) {
  main_1(x_4);
  return;
}

