#include <metal_stdlib>

using namespace metal;
void atomicLoad_afcc03(threadgroup atomic_int* const tint_symbol, device int* const tint_symbol_1) {
  int res = atomic_load_explicit(tint_symbol, memory_order_relaxed);
  *(tint_symbol_1) = res;
}

void compute_main_inner(uint local_invocation_index, threadgroup atomic_int* const tint_symbol_2, device int* const tint_symbol_3) {
  {
    atomic_store_explicit(tint_symbol_2, 0, memory_order_relaxed);
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  atomicLoad_afcc03(tint_symbol_2, tint_symbol_3);
}

kernel void compute_main(device int* tint_symbol_5 [[buffer(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
  threadgroup atomic_int tint_symbol_4;
  compute_main_inner(local_invocation_index, &(tint_symbol_4), tint_symbol_5);
  return;
}

