#include <metal_stdlib>

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

void f_inner(uint local_invocation_index, threadgroup half2x4* const tint_symbol, const constant half2x4* const tint_symbol_1) {
  {
    *(tint_symbol) = half2x4(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] = half4((*(tint_symbol_1))[0]).ywxz;
  (*(tint_symbol))[0][1] = (*(tint_symbol_1))[1][0];
}

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

