#include <metal_stdlib>

using namespace metal;

struct modf_result_vec4 {
  float4 fract;
  float4 whole;
};
modf_result_vec4 tint_modf(float4 param_0) {
  modf_result_vec4 result;
  result.fract = modf(param_0, result.whole);
  return result;
}

void modf_4bfced() {
  float4 arg_0 = float4(1.0f);
  modf_result_vec4 res = tint_modf(arg_0);
}

struct tint_symbol {
  float4 value [[position]];
};

float4 vertex_main_inner() {
  modf_4bfced();
  return float4(0.0f);
}

vertex tint_symbol vertex_main() {
  float4 const inner_result = vertex_main_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main() {
  modf_4bfced();
  return;
}

kernel void compute_main() {
  modf_4bfced();
  return;
}

