//
// fragment_main
//
#include <metal_stdlib>
using namespace metal;

void transpose_70ca11() {
  float3x2 res = float3x2(float2(1.0f), float2(1.0f), float2(1.0f));
}

fragment void fragment_main() {
  transpose_70ca11();
}
//
// compute_main
//
#include <metal_stdlib>
using namespace metal;

void transpose_70ca11() {
  float3x2 res = float3x2(float2(1.0f), float2(1.0f), float2(1.0f));
}

kernel void compute_main() {
  transpose_70ca11();
}
//
// vertex_main
//
#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

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

void transpose_70ca11() {
  float3x2 res = float3x2(float2(1.0f), float2(1.0f), float2(1.0f));
}

VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  transpose_70ca11();
  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;
}
