#include <metal_stdlib>

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

void f_inner(uint local_invocation_index, threadgroup half4x2* const tint_symbol, const constant half4x2* const tint_symbol_1) {
  {
    *(tint_symbol) = half4x2(half2(0.0h), half2(0.0h), half2(0.0h), half2(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].yx;
  (*(tint_symbol))[0][1] = (*(tint_symbol_1))[1][0];
}

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

