#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  threadgroup packed_int3* v;
};

struct tint_symbol_1 {
  packed_int3 tint_symbol;
};

void main_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
  if ((tint_local_index < 1u)) {
    (*tint_module_vars.v) = packed_int3(int3(0));
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  int3((*tint_module_vars.v));
}

kernel void v_1(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_1* v_2 [[threadgroup(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.v=(&(*v_2).tint_symbol)};
  main_inner(tint_local_index, tint_module_vars);
}
