intrinsics/gen/frexp/b45525.wgsl:29:24 warning: use of deprecated intrinsic
  var res: vec4<f32> = frexp(vec4<f32>(), &arg_1);
                       ^^^^^

#include <metal_stdlib>

using namespace metal;

float4 tint_frexp(float4 param_0, thread int4* param_1) {
  int4 exp;
  float4 sig = frexp(param_0, exp);
  *param_1 = exp;
  return sig;
}

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

void frexp_b45525(thread int4* const tint_symbol_1) {
  float4 res = tint_frexp(float4(), tint_symbol_1);
}

float4 vertex_main_inner(thread int4* const tint_symbol_2) {
  frexp_b45525(tint_symbol_2);
  return float4();
}

vertex tint_symbol vertex_main() {
  thread int4 tint_symbol_3 = 0;
  float4 const inner_result = vertex_main_inner(&(tint_symbol_3));
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main() {
  thread int4 tint_symbol_4 = 0;
  frexp_b45525(&(tint_symbol_4));
  return;
}

kernel void compute_main() {
  thread int4 tint_symbol_5 = 0;
  frexp_b45525(&(tint_symbol_5));
  return;
}

