#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

struct vertex_main_outputs {
  float4 VertexOutput_pos [[position]];
};

void transpose_553e90() {
  float2x4 res = float2x4(float4(1.0f), float4(1.0f));
}

fragment void fragment_main() {
  transpose_553e90();
}

kernel void compute_main() {
  transpose_553e90();
}

VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  transpose_553e90();
  return out;
}

vertex vertex_main_outputs vertex_main() {
  vertex_main_outputs tint_wrapper_result = {};
  tint_wrapper_result.VertexOutput_pos = vertex_main_inner().pos;
  return tint_wrapper_result;
}
