#include <metal_stdlib>

using namespace metal;
void uses_a(threadgroup int* const tint_symbol) {
  *(tint_symbol) = (*(tint_symbol) + 1);
}

void uses_b(threadgroup int* const tint_symbol_1) {
  *(tint_symbol_1) = (*(tint_symbol_1) * 2);
}

void uses_a_and_b(threadgroup int* const tint_symbol_2, threadgroup int* const tint_symbol_3) {
  *(tint_symbol_2) = *(tint_symbol_3);
}

void no_uses() {
}

void outer(threadgroup int* const tint_symbol_4, threadgroup int* const tint_symbol_5) {
  *(tint_symbol_4) = 0;
  uses_a(tint_symbol_4);
  uses_a_and_b(tint_symbol_5, tint_symbol_4);
  uses_b(tint_symbol_5);
  no_uses();
}

kernel void main1() {
  threadgroup int tint_symbol_7 = 0;
  threadgroup int* const tint_symbol_6 = &(tint_symbol_7);
  *(tint_symbol_6) = 42;
  uses_a(tint_symbol_6);
  return;
}

kernel void main2() {
  threadgroup int tint_symbol_9 = 0;
  threadgroup int* const tint_symbol_8 = &(tint_symbol_9);
  *(tint_symbol_8) = 7;
  uses_b(tint_symbol_8);
  return;
}

kernel void main3() {
  threadgroup int tint_symbol_11 = 0;
  threadgroup int* const tint_symbol_10 = &(tint_symbol_11);
  threadgroup int tint_symbol_13 = 0;
  threadgroup int* const tint_symbol_12 = &(tint_symbol_13);
  outer(tint_symbol_10, tint_symbol_12);
  no_uses();
  return;
}

kernel void main4() {
  no_uses();
  return;
}

