#include <metal_stdlib>
using namespace metal;

struct modf_result_vec2_f32 {
  float2 fract;
  float2 whole;
};

struct VertexOutput {
  float4 pos;
};

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

void modf_732aa6() {
  modf_result_vec2_f32 res = modf_result_vec2_f32{.fract=float2(-0.5f), .whole=float2(-1.0f)};
}

fragment void fragment_main() {
  modf_732aa6();
}

kernel void compute_main() {
  modf_732aa6();
}

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