#include <metal_stdlib>

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

struct SB_RW {
  int arg_0;
};

void atomicAnd_152966(device SB_RW_atomic* const tint_symbol) {
  int arg_1 = 0;
  int res = 0;
  arg_1 = 1;
  int const x_20 = arg_1;
  int const x_13 = atomic_fetch_and_explicit(&((*(tint_symbol)).arg_0), x_20, memory_order_relaxed);
  res = x_13;
  return;
}

void fragment_main_1(device SB_RW_atomic* const tint_symbol_1) {
  atomicAnd_152966(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) {
  atomicAnd_152966(tint_symbol_3);
  return;
}

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

