#include <metal_stdlib>

using namespace metal;
uint tint_workgroupUniformLoad(threadgroup uint* const p) {
  threadgroup_barrier(mem_flags::mem_threadgroup);
  uint const result = *(p);
  threadgroup_barrier(mem_flags::mem_threadgroup);
  return result;
}

void workgroupUniformLoad_37307c(threadgroup uint* const tint_symbol) {
  uint res = tint_workgroupUniformLoad(tint_symbol);
}

void compute_main_inner(uint local_invocation_index, threadgroup uint* const tint_symbol_1) {
  {
    *(tint_symbol_1) = 0u;
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  workgroupUniformLoad_37307c(tint_symbol_1);
}

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

