#include <metal_stdlib>

using namespace metal;
struct doesNotMatter {
  /* 0x0000 */ float x_compute_data[1];
};

float nb_mod_() {
  float s = 0.0f;
  int i = 0;
  int GLF_live1i = 0;
  int GLF_live1_looplimiter2 = 0;
  float x_51 = 0.0f;
  float x_56_phi = 0.0f;
  s = 0.0f;
  i = 5;
  while (true) {
    float x_50 = 0.0f;
    float x_51_phi = 0.0f;
    x_56_phi = 0.0f;
    if ((5 < 800)) {
    } else {
      break;
    }
    GLF_live1i = 0;
    while (true) {
      x_51_phi = 0.0f;
      if ((0 < 20)) {
      } else {
        break;
      }
      if ((0 >= 5)) {
        x_50 = (0.0f + 1.0f);
        s = x_50;
        x_51_phi = x_50;
        break;
      }
      return 42.0f;
    }
    x_51 = x_51_phi;
    if ((float(5) <= x_51)) {
      x_56_phi = x_51;
      break;
    }
    return 42.0f;
  }
  float const x_56 = x_56_phi;
  return x_56;
}

void main_1(device doesNotMatter& x_9) {
  float const x_32 = nb_mod_();
  x_9.x_compute_data[0] = x_32;
  return;
}

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

