#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  threadgroup float2x4* S;
};

struct tint_symbol_2 {
  float2x4 tint_symbol_1;
};

float4 func(threadgroup float4* const pointer) {
  return (*pointer);
}

void tint_symbol_inner(uint tint_local_index, tint_module_vars_struct tint_module_vars) {
  if ((tint_local_index == 0u)) {
    (*tint_module_vars.S) = float2x4(float4(0.0f), float4(0.0f));
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  float4 const r = func((&(*tint_module_vars.S)[1]));
}

kernel void tint_symbol(uint tint_local_index [[thread_index_in_threadgroup]], threadgroup tint_symbol_2* v [[threadgroup(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.S=(&(*v).tint_symbol_1)};
  tint_symbol_inner(tint_local_index, tint_module_vars);
}
