#include <metal_stdlib>

using namespace metal;

template<typename T, size_t N>
struct tint_array {
    const constant T& operator[](size_t i) const constant { return elements[i]; }
    device T& operator[](size_t i) device { return elements[i]; }
    const device T& operator[](size_t i) const device { return elements[i]; }
    thread T& operator[](size_t i) thread { return elements[i]; }
    const thread T& operator[](size_t i) const thread { return elements[i]; }
    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
    T elements[N];
};

struct Constants {
  /* 0x0000 */ uint zero;
};

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

struct TestData {
  /* 0x0000 */ tint_array<atomic_int, 3> data;
};

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

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

