#include <metal_stdlib>

using namespace metal;

struct modf_result_vec2 {
  float2 fract;
  float2 whole;
};
modf_result_vec2 tint_modf(float2 param_0) {
  float2 whole;
  float2 fract = modf(param_0, whole);
  return {fract, whole};
}

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

void modf_c87851() {
  modf_result_vec2 res = tint_modf(float2());
}

vertex tint_symbol vertex_main() {
  modf_c87851();
  tint_symbol const tint_symbol_1 = {.value=float4()};
  return tint_symbol_1;
}

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

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

