#include <metal_stdlib>

using namespace metal;
void atomicLoad_361bf1(threadgroup atomic_uint* const tint_symbol) {
  uint res = atomic_load_explicit(tint_symbol, memory_order_relaxed);
}

void compute_main_inner(uint local_invocation_index, threadgroup atomic_uint* const tint_symbol_1) {
  {
    atomic_store_explicit(tint_symbol_1, 0u, memory_order_relaxed);
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  atomicLoad_361bf1(tint_symbol_1);
}

kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) {
  threadgroup atomic_uint tint_symbol_2;
  compute_main_inner(local_invocation_index, &(tint_symbol_2));
  return;
}

