#include <metal_stdlib>

using namespace metal;

#define TINT_ISOLATE_UB(VOLATILE_NAME) \
  volatile bool VOLATILE_NAME = true; \
  if (VOLATILE_NAME)

int tint_workgroupUniformLoad(threadgroup int* const p) {
  threadgroup_barrier(mem_flags::mem_threadgroup);
  int const result = *(p);
  threadgroup_barrier(mem_flags::mem_threadgroup);
  return result;
}

void foo(threadgroup int* const tint_symbol_4, threadgroup int* const tint_symbol_5) {
  {
    int i = 0;
    TINT_ISOLATE_UB(tint_volatile_true) while(true) {
      int const tint_symbol = i;
      int const tint_symbol_1 = tint_workgroupUniformLoad(tint_symbol_4);
      if (!((tint_symbol < tint_symbol_1))) {
        break;
      }
      {
      }
      {
        int const tint_symbol_2 = i;
        int const tint_symbol_3 = tint_workgroupUniformLoad(tint_symbol_5);
        i = as_type<int>((as_type<uint>(tint_symbol_2) + as_type<uint>(tint_symbol_3)));
      }
    }
  }
}

