#version 310 es

struct atomic_compare_exchange_resultu32 {
  uint old_value;
  bool exchanged;
};

struct atomic_compare_exchange_resulti32 {
  int old_value;
  bool exchanged;
};


struct a_u32_block {
  uint inner;
};

layout(binding = 0, std430) buffer a_u32_block_1 {
  uint inner;
} a_u32;
struct a_i32_block {
  int inner;
};

layout(binding = 1, std430) buffer a_i32_block_1 {
  int inner;
} a_i32;
shared uint b_u32;
shared int b_i32;
void tint_symbol(uint local_invocation_index) {
  if ((local_invocation_index < 1u)) {
    atomicExchange(b_u32, 0u);
    atomicExchange(b_i32, 0);
  }
  barrier();
  {
    uint value = 42u;
    atomic_compare_exchange_resultu32 atomic_compare_result;
    atomic_compare_result.old_value = atomicCompSwap(a_u32.inner, 0u, value);
    atomic_compare_result.exchanged = atomic_compare_result.old_value == 0u;
    atomic_compare_exchange_resultu32 r1 = atomic_compare_result;
    atomic_compare_exchange_resultu32 atomic_compare_result_1;
    atomic_compare_result_1.old_value = atomicCompSwap(a_u32.inner, 0u, value);
    atomic_compare_result_1.exchanged = atomic_compare_result_1.old_value == 0u;
    atomic_compare_exchange_resultu32 r2 = atomic_compare_result_1;
    atomic_compare_exchange_resultu32 atomic_compare_result_2;
    atomic_compare_result_2.old_value = atomicCompSwap(a_u32.inner, 0u, value);
    atomic_compare_result_2.exchanged = atomic_compare_result_2.old_value == 0u;
    atomic_compare_exchange_resultu32 r3 = atomic_compare_result_2;
  }
  {
    int value = 42;
    atomic_compare_exchange_resulti32 atomic_compare_result_3;
    atomic_compare_result_3.old_value = atomicCompSwap(a_i32.inner, 0, value);
    atomic_compare_result_3.exchanged = atomic_compare_result_3.old_value == 0;
    atomic_compare_exchange_resulti32 r1 = atomic_compare_result_3;
    atomic_compare_exchange_resulti32 atomic_compare_result_4;
    atomic_compare_result_4.old_value = atomicCompSwap(a_i32.inner, 0, value);
    atomic_compare_result_4.exchanged = atomic_compare_result_4.old_value == 0;
    atomic_compare_exchange_resulti32 r2 = atomic_compare_result_4;
    atomic_compare_exchange_resulti32 atomic_compare_result_5;
    atomic_compare_result_5.old_value = atomicCompSwap(a_i32.inner, 0, value);
    atomic_compare_result_5.exchanged = atomic_compare_result_5.old_value == 0;
    atomic_compare_exchange_resulti32 r3 = atomic_compare_result_5;
  }
  {
    uint value = 42u;
    atomic_compare_exchange_resultu32 atomic_compare_result_6;
    atomic_compare_result_6.old_value = atomicCompSwap(b_u32, 0u, value);
    atomic_compare_result_6.exchanged = atomic_compare_result_6.old_value == 0u;
    atomic_compare_exchange_resultu32 r1 = atomic_compare_result_6;
    atomic_compare_exchange_resultu32 atomic_compare_result_7;
    atomic_compare_result_7.old_value = atomicCompSwap(b_u32, 0u, value);
    atomic_compare_result_7.exchanged = atomic_compare_result_7.old_value == 0u;
    atomic_compare_exchange_resultu32 r2 = atomic_compare_result_7;
    atomic_compare_exchange_resultu32 atomic_compare_result_8;
    atomic_compare_result_8.old_value = atomicCompSwap(b_u32, 0u, value);
    atomic_compare_result_8.exchanged = atomic_compare_result_8.old_value == 0u;
    atomic_compare_exchange_resultu32 r3 = atomic_compare_result_8;
  }
  {
    int value = 42;
    atomic_compare_exchange_resulti32 atomic_compare_result_9;
    atomic_compare_result_9.old_value = atomicCompSwap(b_i32, 0, value);
    atomic_compare_result_9.exchanged = atomic_compare_result_9.old_value == 0;
    atomic_compare_exchange_resulti32 r1 = atomic_compare_result_9;
    atomic_compare_exchange_resulti32 atomic_compare_result_10;
    atomic_compare_result_10.old_value = atomicCompSwap(b_i32, 0, value);
    atomic_compare_result_10.exchanged = atomic_compare_result_10.old_value == 0;
    atomic_compare_exchange_resulti32 r2 = atomic_compare_result_10;
    atomic_compare_exchange_resulti32 atomic_compare_result_11;
    atomic_compare_result_11.old_value = atomicCompSwap(b_i32, 0, value);
    atomic_compare_result_11.exchanged = atomic_compare_result_11.old_value == 0;
    atomic_compare_exchange_resulti32 r3 = atomic_compare_result_11;
  }
}

layout(local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
void main() {
  tint_symbol(gl_LocalInvocationIndex);
  return;
}
