#include <metal_stdlib>

using namespace metal;
struct S {
  /* 0x0000 */ uint field0[1];
};

void main_1(device S& x_5, device S& x_6, device S& x_7, thread uint3* const tint_symbol_1) {
  uint const x_21 = (*(tint_symbol_1)).x;
  uint const x_23 = x_5.field0[x_21];
  uint const x_25 = x_6.field0[x_21];
  x_7.field0[x_21] = select(0u, 1u, (as_type<int>(x_23) < as_type<int>(x_25)));
  return;
}

void tint_symbol_inner(device S& x_5, device S& x_6, device S& x_7, uint3 x_2_param, thread uint3* const tint_symbol_2) {
  *(tint_symbol_2) = x_2_param;
  main_1(x_5, x_6, x_7, tint_symbol_2);
}

kernel void tint_symbol(uint3 x_2_param [[thread_position_in_grid]], device S& x_5 [[buffer(0)]], device S& x_6 [[buffer(1)]], device S& x_7 [[buffer(2)]]) {
  thread uint3 tint_symbol_3 = 0u;
  tint_symbol_inner(x_5, x_6, x_7, x_2_param, &(tint_symbol_3));
  return;
}

