#include <metal_stdlib>

using namespace metal;
struct SB_RW_atomic {
  /* 0x0000 */ atomic_uint arg_0;
};

struct SB_RW {
  uint arg_0;
};

void atomicLoad_fe6cc3(device SB_RW_atomic* const tint_symbol) {
  uint res = 0u;
  uint const x_9 = atomic_load_explicit(&((*(tint_symbol)).arg_0), memory_order_relaxed);
  res = x_9;
  return;
}

void fragment_main_1(device SB_RW_atomic* const tint_symbol_1) {
  atomicLoad_fe6cc3(tint_symbol_1);
  return;
}

fragment void fragment_main(device SB_RW_atomic* tint_symbol_2 [[buffer(0)]]) {
  fragment_main_1(tint_symbol_2);
  return;
}

void compute_main_1(device SB_RW_atomic* const tint_symbol_3) {
  atomicLoad_fe6cc3(tint_symbol_3);
  return;
}

kernel void compute_main(device SB_RW_atomic* tint_symbol_4 [[buffer(0)]]) {
  compute_main_1(tint_symbol_4);
  return;
}

