#include <metal_stdlib>

using namespace metal;
struct Constants {
  /* 0x0000 */ uint zero;
};

struct Result {
  /* 0x0000 */ uint value;
};

struct tint_array_wrapper {
  /* 0x0000 */ atomic_int arr[3];
};

struct TestData {
  /* 0x0000 */ tint_array_wrapper data;
};

int runTest(device TestData* const tint_symbol_3, const constant Constants* const tint_symbol_4) {
  return atomic_load_explicit(&((*(tint_symbol_3)).data.arr[(0u + uint((*(tint_symbol_4)).zero))]), memory_order_relaxed);
}

kernel void tint_symbol(device TestData* tint_symbol_5 [[buffer(2)]], const constant Constants* tint_symbol_6 [[buffer(0)]], device Result* tint_symbol_7 [[buffer(1)]]) {
  int const tint_symbol_1 = runTest(tint_symbol_5, tint_symbol_6);
  uint const tint_symbol_2 = uint(tint_symbol_1);
  (*(tint_symbol_7)).value = tint_symbol_2;
  return;
}

