#include <metal_stdlib>
using namespace metal;
struct modf_result_f16 {
  half fract;
  half whole;
};
struct vertex_main_outputs {
  float4 tint_symbol [[position]];
};

void modf_8dbbbf() {
  modf_result_f16 res = modf_result_f16{.fract=-0.5h, .whole=-1.0h};
}
float4 vertex_main_inner() {
  modf_8dbbbf();
  return float4(0.0f);
}
fragment void fragment_main() {
  modf_8dbbbf();
}
kernel void compute_main() {
  modf_8dbbbf();
}
vertex vertex_main_outputs vertex_main() {
  return vertex_main_outputs{.tint_symbol=vertex_main_inner()};
}
