#include <metal_stdlib>

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

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

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

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

