#include <metal_stdlib>

using namespace metal;
void atomicExchange_0a5dca(threadgroup atomic_uint* const tint_symbol, device uint* const tint_symbol_1) {
  uint arg_1 = 1u;
  uint res = atomic_exchange_explicit(tint_symbol, arg_1, memory_order_relaxed);
  *(tint_symbol_1) = res;
}

void compute_main_inner(uint local_invocation_index, threadgroup atomic_uint* const tint_symbol_2, device uint* const tint_symbol_3) {
  {
    atomic_store_explicit(tint_symbol_2, 0u, memory_order_relaxed);
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  atomicExchange_0a5dca(tint_symbol_2, tint_symbol_3);
}

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

