#include <metal_stdlib>

using namespace metal;
struct tint_symbol_5 {
  half3x4 w;
};

void f_inner(uint local_invocation_index, threadgroup half3x4* const tint_symbol, const constant half3x4* const tint_symbol_1) {
  {
    *(tint_symbol) = half3x4(half4(0.0h), half4(0.0h), half4(0.0h));
  }
  threadgroup_barrier(mem_flags::mem_threadgroup);
  *(tint_symbol) = *(tint_symbol_1);
  (*(tint_symbol))[1] = (*(tint_symbol_1))[0];
  (*(tint_symbol))[1] = (*(tint_symbol_1))[0].ywxz;
  (*(tint_symbol))[0][1] = (*(tint_symbol_1))[1][0];
}

kernel void f(const constant half3x4* tint_symbol_4 [[buffer(0)]], threadgroup tint_symbol_5* tint_symbol_3 [[threadgroup(0)]], uint local_invocation_index [[thread_index_in_threadgroup]]) {
  threadgroup half3x4* const tint_symbol_2 = &((*(tint_symbol_3)).w);
  f_inner(local_invocation_index, tint_symbol_2, tint_symbol_4);
  return;
}

