tint: Implement modf and frexp built-ins for f16 types

This patch implement modf and frexp built-ins for f16 types, and also
simplify their implementation for f32 in MSL and HLSL, and clean up
deprecated code in GLSL writer. Corresponding unittests are also
implemented, but end-to-end tests for f16 are not implemented yet.

Bug: tint:1473, tint:1502
Change-Id: I12887ae5303c6dc032a51f619e1afeb19b4603b6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/98102
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/test/tint/bug/chromium/1236161.wgsl.expected.dxc.hlsl b/test/tint/bug/chromium/1236161.wgsl.expected.dxc.hlsl
index a0d44d9..1361053 100644
--- a/test/tint/bug/chromium/1236161.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/chromium/1236161.wgsl.expected.dxc.hlsl
@@ -3,9 +3,8 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
diff --git a/test/tint/bug/chromium/1236161.wgsl.expected.fxc.hlsl b/test/tint/bug/chromium/1236161.wgsl.expected.fxc.hlsl
index a0d44d9..1361053 100644
--- a/test/tint/bug/chromium/1236161.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/chromium/1236161.wgsl.expected.fxc.hlsl
@@ -3,9 +3,8 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
diff --git a/test/tint/bug/chromium/1236161.wgsl.expected.msl b/test/tint/bug/chromium/1236161.wgsl.expected.msl
index 4eb36e6..8d7aa31 100644
--- a/test/tint/bug/chromium/1236161.wgsl.expected.msl
+++ b/test/tint/bug/chromium/1236161.wgsl.expected.msl
@@ -7,9 +7,9 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
 void i() {
diff --git a/test/tint/builtins/frexp.wgsl.expected.msl b/test/tint/builtins/frexp.wgsl.expected.msl
index d850760..c9b0a67 100644
--- a/test/tint/builtins/frexp.wgsl.expected.msl
+++ b/test/tint/builtins/frexp.wgsl.expected.msl
@@ -7,9 +7,9 @@
   int exp;
 };
 frexp_result tint_frexp(float param_0) {
-  int exp;
-  float sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
 kernel void tint_symbol() {
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.fxc.hlsl
deleted file mode 100644
index d546bd6..0000000
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct frexp_result_vec3 {
-  float3 sig;
-  int3 exp;
-};
-frexp_result_vec3 tint_frexp(float3 param_0) {
-  float3 exp;
-  float3 sig = frexp(param_0, exp);
-  frexp_result_vec3 result = {sig, int3(exp)};
-  return result;
-}
-
-void frexp_368997() {
-  frexp_result_vec3 res = tint_frexp((1.0f).xxx);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  frexp_368997();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  frexp_368997();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  frexp_368997();
-  return;
-}
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 5fc892b..0000000
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct frexp_result_vec4 {
-  float4 sig;
-  int4 exp;
-};
-frexp_result_vec4 tint_frexp(float4 param_0) {
-  float4 exp;
-  float4 sig = frexp(param_0, exp);
-  frexp_result_vec4 result = {sig, int4(exp)};
-  return result;
-}
-
-void frexp_3c4f48() {
-  frexp_result_vec4 res = tint_frexp((1.0f).xxxx);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  frexp_3c4f48();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  frexp_3c4f48();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  frexp_3c4f48();
-  return;
-}
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl
similarity index 87%
rename from test/tint/builtins/gen/literal/frexp/eabd40.wgsl
rename to test/tint/builtins/gen/literal/frexp/4b2200.wgsl
index 4a5552f..271abc5 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(f32) -> __frexp_result
-fn frexp_eabd40() {
+// fn frexp(f32) -> __frexp_result<f32>
+fn frexp_4b2200() {
   var res = frexp(1.f);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_eabd40();
+  frexp_4b2200();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.dxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.dxc.hlsl
index 2519b25..15ae2ad 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   frexp_result res = tint_frexp(1.0f);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_eabd40();
+  frexp_4b2200();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.fxc.hlsl
index 2519b25..15ae2ad 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   frexp_result res = tint_frexp(1.0f);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_eabd40();
+  frexp_4b2200();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.glsl
similarity index 90%
rename from test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.glsl
index 8fb90cd..b9a00ad 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   frexp_result res = tint_frexp(1.0f);
 }
 
 vec4 vertex_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   frexp_result res = tint_frexp(1.0f);
 }
 
 void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   frexp_result res = tint_frexp(1.0f);
 }
 
 void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.msl
index 2dee3e7..175e451 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int exp;
 };
 frexp_result tint_frexp(float param_0) {
-  int exp;
-  float sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   frexp_result res = tint_frexp(1.0f);
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_eabd40();
+  frexp_4b2200();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
 kernel void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.spvasm
index ef220f5..f6d258c 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_eabd40 "frexp_eabd40"
+               OpName %frexp_4b2200 "frexp_4b2200"
                OpName %__frexp_result "__frexp_result"
                OpMemberName %__frexp_result 0 "sig"
                OpMemberName %__frexp_result 1 "exp"
@@ -42,7 +42,7 @@
 %_ptr_Function___frexp_result = OpTypePointer Function %__frexp_result
          %20 = OpConstantNull %__frexp_result
          %21 = OpTypeFunction %v4float
-%frexp_eabd40 = OpFunction %void None %9
+%frexp_4b2200 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___frexp_result Function %20
          %13 = OpExtInst %__frexp_result %16 FrexpStruct %float_1
@@ -51,7 +51,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %21
          %23 = OpLabel
-         %24 = OpFunctionCall %void %frexp_eabd40
+         %24 = OpFunctionCall %void %frexp_4b2200
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -63,11 +63,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %frexp_eabd40
+         %30 = OpFunctionCall %void %frexp_4b2200
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_eabd40
+         %33 = OpFunctionCall %void %frexp_4b2200
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.wgsl
similarity index 72%
rename from test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.wgsl
index 4bd91b6..92b00df 100644
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/4b2200.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn frexp_eabd40() {
+fn frexp_4b2200() {
   var res = frexp(1.0f);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_eabd40();
+  frexp_4b2200();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 310178b..0000000
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct frexp_result_vec2 {
-  float2 sig;
-  int2 exp;
-};
-frexp_result_vec2 tint_frexp(float2 param_0) {
-  float2 exp;
-  float2 sig = frexp(param_0, exp);
-  frexp_result_vec2 result = {sig, int2(exp)};
-  return result;
-}
-
-void frexp_4bdfc7() {
-  frexp_result_vec2 res = tint_frexp((1.0f).xx);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  frexp_4bdfc7();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  frexp_4bdfc7();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  frexp_4bdfc7();
-  return;
-}
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl
similarity index 86%
rename from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl
rename to test/tint/builtins/gen/literal/frexp/77af93.wgsl
index 0ee9560..489f812 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(vec<4, f32>) -> __frexp_result_vec<4>
-fn frexp_3c4f48() {
+// fn frexp(vec<4, f32>) -> __frexp_result_vec<4, f32>
+fn frexp_77af93() {
   var res = frexp(vec4<f32>(1.f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_3c4f48();
+  frexp_77af93();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.dxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.dxc.hlsl
index 5fc892b..7ef05cb 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   frexp_result_vec4 res = tint_frexp((1.0f).xxxx);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_3c4f48();
+  frexp_77af93();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.fxc.hlsl
index 5fc892b..7ef05cb 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   frexp_result_vec4 res = tint_frexp((1.0f).xxxx);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_3c4f48();
+  frexp_77af93();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.glsl
index 83e64f2..0527334 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   frexp_result_vec4 res = tint_frexp(vec4(1.0f));
 }
 
 vec4 vertex_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   frexp_result_vec4 res = tint_frexp(vec4(1.0f));
 }
 
 void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   frexp_result_vec4 res = tint_frexp(vec4(1.0f));
 }
 
 void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.msl
index c150a8c..2b6c155 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int4 exp;
 };
 frexp_result_vec4 tint_frexp(float4 param_0) {
-  int4 exp;
-  float4 sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result_vec4 result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   frexp_result_vec4 res = tint_frexp(float4(1.0f));
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_3c4f48();
+  frexp_77af93();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
 kernel void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.spvasm
index 953f054..fb75978 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_3c4f48 "frexp_3c4f48"
+               OpName %frexp_77af93 "frexp_77af93"
                OpName %__frexp_result_vec4 "__frexp_result_vec4"
                OpMemberName %__frexp_result_vec4 0 "sig"
                OpMemberName %__frexp_result_vec4 1 "exp"
@@ -44,7 +44,7 @@
 %_ptr_Function___frexp_result_vec4 = OpTypePointer Function %__frexp_result_vec4
          %22 = OpConstantNull %__frexp_result_vec4
          %23 = OpTypeFunction %v4float
-%frexp_3c4f48 = OpFunction %void None %9
+%frexp_77af93 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___frexp_result_vec4 Function %22
          %13 = OpExtInst %__frexp_result_vec4 %17 FrexpStruct %19
@@ -53,7 +53,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %23
          %25 = OpLabel
-         %26 = OpFunctionCall %void %frexp_3c4f48
+         %26 = OpFunctionCall %void %frexp_77af93
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -65,11 +65,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %frexp_3c4f48
+         %32 = OpFunctionCall %void %frexp_77af93
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %frexp_3c4f48
+         %35 = OpFunctionCall %void %frexp_77af93
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.wgsl
similarity index 73%
rename from test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.wgsl
index cb1d316..3e057ce 100644
--- a/test/tint/builtins/gen/literal/frexp/3c4f48.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/77af93.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn frexp_3c4f48() {
+fn frexp_77af93() {
   var res = frexp(vec4<f32>(1.0f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_3c4f48();
+  frexp_77af93();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl b/test/tint/builtins/gen/literal/frexp/979800.wgsl
similarity index 86%
rename from test/tint/builtins/gen/literal/frexp/368997.wgsl
rename to test/tint/builtins/gen/literal/frexp/979800.wgsl
index 25c6007..24f1217 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(vec<3, f32>) -> __frexp_result_vec<3>
-fn frexp_368997() {
+// fn frexp(vec<3, f32>) -> __frexp_result_vec<3, f32>
+fn frexp_979800() {
   var res = frexp(vec3<f32>(1.f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_368997();
+  frexp_979800();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_368997();
+  frexp_979800();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.dxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.dxc.hlsl
index d546bd6..1152ca2 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_368997() {
+void frexp_979800() {
   frexp_result_vec3 res = tint_frexp((1.0f).xxx);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_368997();
+  frexp_979800();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.fxc.hlsl
index d546bd6..1152ca2 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_368997() {
+void frexp_979800() {
   frexp_result_vec3 res = tint_frexp((1.0f).xxx);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_368997();
+  frexp_979800();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.glsl
index 0ebe90f..b102854 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void frexp_368997() {
+void frexp_979800() {
   frexp_result_vec3 res = tint_frexp(vec3(1.0f));
 }
 
 vec4 vertex_main() {
-  frexp_368997();
+  frexp_979800();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void frexp_368997() {
+void frexp_979800() {
   frexp_result_vec3 res = tint_frexp(vec3(1.0f));
 }
 
 void fragment_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void frexp_368997() {
+void frexp_979800() {
   frexp_result_vec3 res = tint_frexp(vec3(1.0f));
 }
 
 void compute_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.msl
index d00280f..ee55ebf 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int3 exp;
 };
 frexp_result_vec3 tint_frexp(float3 param_0) {
-  int3 exp;
-  float3 sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result_vec3 result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_368997() {
+void frexp_979800() {
   frexp_result_vec3 res = tint_frexp(float3(1.0f));
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_368997();
+  frexp_979800();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
 kernel void compute_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.spvasm
index df6c282..299cabc 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_368997 "frexp_368997"
+               OpName %frexp_979800 "frexp_979800"
                OpName %__frexp_result_vec3 "__frexp_result_vec3"
                OpMemberName %__frexp_result_vec3 0 "sig"
                OpMemberName %__frexp_result_vec3 1 "exp"
@@ -45,7 +45,7 @@
 %_ptr_Function___frexp_result_vec3 = OpTypePointer Function %__frexp_result_vec3
          %23 = OpConstantNull %__frexp_result_vec3
          %24 = OpTypeFunction %v4float
-%frexp_368997 = OpFunction %void None %9
+%frexp_979800 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___frexp_result_vec3 Function %23
          %13 = OpExtInst %__frexp_result_vec3 %18 FrexpStruct %20
@@ -54,7 +54,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %24
          %26 = OpLabel
-         %27 = OpFunctionCall %void %frexp_368997
+         %27 = OpFunctionCall %void %frexp_979800
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -66,11 +66,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_368997
+         %33 = OpFunctionCall %void %frexp_979800
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_368997
+         %36 = OpFunctionCall %void %frexp_979800
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.wgsl
similarity index 73%
rename from test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.wgsl
index 2f9ec78..d3dd2f8 100644
--- a/test/tint/builtins/gen/literal/frexp/368997.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/979800.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn frexp_368997() {
+fn frexp_979800() {
   var res = frexp(vec3<f32>(1.0f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_368997();
+  frexp_979800();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_368997();
+  frexp_979800();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 2519b25..0000000
--- a/test/tint/builtins/gen/literal/frexp/eabd40.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,41 +0,0 @@
-struct frexp_result {
-  float sig;
-  int exp;
-};
-frexp_result tint_frexp(float param_0) {
-  float exp;
-  float sig = frexp(param_0, exp);
-  frexp_result result = {sig, int(exp)};
-  return result;
-}
-
-void frexp_eabd40() {
-  frexp_result res = tint_frexp(1.0f);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  frexp_eabd40();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  frexp_eabd40();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  frexp_eabd40();
-  return;
-}
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl
similarity index 86%
rename from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl
rename to test/tint/builtins/gen/literal/frexp/eb2421.wgsl
index 1a956d2..2f5b30b 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(vec<2, f32>) -> __frexp_result_vec<2>
-fn frexp_4bdfc7() {
+// fn frexp(vec<2, f32>) -> __frexp_result_vec<2, f32>
+fn frexp_eb2421() {
   var res = frexp(vec2<f32>(1.f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.dxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.dxc.hlsl
index 310178b..b45f18e 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   frexp_result_vec2 res = tint_frexp((1.0f).xx);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.fxc.hlsl
index 310178b..b45f18e 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   frexp_result_vec2 res = tint_frexp((1.0f).xx);
 }
 
@@ -18,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +30,12 @@
 }
 
 void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.glsl
index b6b21f4..0528f5e 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   frexp_result_vec2 res = tint_frexp(vec2(1.0f));
 }
 
 vec4 vertex_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   frexp_result_vec2 res = tint_frexp(vec2(1.0f));
 }
 
 void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   frexp_result_vec2 res = tint_frexp(vec2(1.0f));
 }
 
 void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.msl
index dc8fd47..8a7cb11 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int2 exp;
 };
 frexp_result_vec2 tint_frexp(float2 param_0) {
-  int2 exp;
-  float2 sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result_vec2 result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   frexp_result_vec2 res = tint_frexp(float2(1.0f));
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
 kernel void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.spvasm
index 5c21dff..b4eb572 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_4bdfc7 "frexp_4bdfc7"
+               OpName %frexp_eb2421 "frexp_eb2421"
                OpName %__frexp_result_vec2 "__frexp_result_vec2"
                OpMemberName %__frexp_result_vec2 0 "sig"
                OpMemberName %__frexp_result_vec2 1 "exp"
@@ -45,7 +45,7 @@
 %_ptr_Function___frexp_result_vec2 = OpTypePointer Function %__frexp_result_vec2
          %23 = OpConstantNull %__frexp_result_vec2
          %24 = OpTypeFunction %v4float
-%frexp_4bdfc7 = OpFunction %void None %9
+%frexp_eb2421 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___frexp_result_vec2 Function %23
          %13 = OpExtInst %__frexp_result_vec2 %18 FrexpStruct %20
@@ -54,7 +54,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %24
          %26 = OpLabel
-         %27 = OpFunctionCall %void %frexp_4bdfc7
+         %27 = OpFunctionCall %void %frexp_eb2421
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -66,11 +66,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_4bdfc7
+         %33 = OpFunctionCall %void %frexp_eb2421
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_4bdfc7
+         %36 = OpFunctionCall %void %frexp_eb2421
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.wgsl
similarity index 73%
rename from test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.wgsl
index 23a0e00..a4877a1 100644
--- a/test/tint/builtins/gen/literal/frexp/4bdfc7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/eb2421.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn frexp_4bdfc7() {
+fn frexp_eb2421() {
   var res = frexp(vec2<f32>(1.0f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl
similarity index 86%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl
index bd7b737..8d3d0dd 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(vec<2, f32>) -> __modf_result_vec<2>
-fn modf_f5f20d() {
+// fn modf(vec<2, f32>) -> __modf_result_vec<2, f32>
+fn modf_2d50da() {
   var res = modf(vec2<f32>(1.f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_f5f20d();
+  modf_2d50da();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.dxc.hlsl
index 6b7bdea..2aba1e7 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float2 whole;
 };
 modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  modf_result_vec2 result = {fract, whole};
+  modf_result_vec2 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_f5f20d() {
+void modf_2d50da() {
   modf_result_vec2 res = tint_modf((1.0f).xx);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_f5f20d();
+  modf_2d50da();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.fxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.fxc.hlsl
index 6b7bdea..2aba1e7 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float2 whole;
 };
 modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  modf_result_vec2 result = {fract, whole};
+  modf_result_vec2 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_f5f20d() {
+void modf_2d50da() {
   modf_result_vec2 res = tint_modf((1.0f).xx);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_f5f20d();
+  modf_2d50da();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.glsl
index aa9477c..540a580 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void modf_f5f20d() {
+void modf_2d50da() {
   modf_result_vec2 res = tint_modf(vec2(1.0f));
 }
 
 vec4 vertex_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void modf_f5f20d() {
+void modf_2d50da() {
   modf_result_vec2 res = tint_modf(vec2(1.0f));
 }
 
 void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void modf_f5f20d() {
+void modf_2d50da() {
   modf_result_vec2 res = tint_modf(vec2(1.0f));
 }
 
 void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.msl
index e2b7204..edccc81 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float2 whole;
 };
 modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result_vec2 result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_f5f20d() {
+void modf_2d50da() {
   modf_result_vec2 res = tint_modf(float2(1.0f));
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_f5f20d();
+  modf_2d50da();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
 kernel void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.spvasm
index dd059cb..bc75769 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_f5f20d "modf_f5f20d"
+               OpName %modf_2d50da "modf_2d50da"
                OpName %__modf_result_vec2 "__modf_result_vec2"
                OpMemberName %__modf_result_vec2 0 "fract"
                OpMemberName %__modf_result_vec2 1 "whole"
@@ -43,7 +43,7 @@
 %_ptr_Function___modf_result_vec2 = OpTypePointer Function %__modf_result_vec2
          %21 = OpConstantNull %__modf_result_vec2
          %22 = OpTypeFunction %v4float
-%modf_f5f20d = OpFunction %void None %9
+%modf_2d50da = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___modf_result_vec2 Function %21
          %13 = OpExtInst %__modf_result_vec2 %16 ModfStruct %18
@@ -52,7 +52,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %22
          %24 = OpLabel
-         %25 = OpFunctionCall %void %modf_f5f20d
+         %25 = OpFunctionCall %void %modf_2d50da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -64,11 +64,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %30 = OpLabel
-         %31 = OpFunctionCall %void %modf_f5f20d
+         %31 = OpFunctionCall %void %modf_2d50da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %modf_f5f20d
+         %34 = OpFunctionCall %void %modf_2d50da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.wgsl
similarity index 74%
rename from test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.wgsl
index c34c0df..d893b25 100644
--- a/test/tint/builtins/gen/literal/modf/f5f20d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/2d50da.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn modf_f5f20d() {
+fn modf_2d50da() {
   var res = modf(vec2<f32>(1.0f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_f5f20d();
+  modf_2d50da();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl
similarity index 86%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl
index 0096473..1a3fd9a 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(vec<4, f32>) -> __modf_result_vec<4>
-fn modf_ec2dbc() {
+// fn modf(vec<4, f32>) -> __modf_result_vec<4, f32>
+fn modf_4bfced() {
   var res = modf(vec4<f32>(1.f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_ec2dbc();
+  modf_4bfced();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.dxc.hlsl
index 1610de1..043bbab 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float4 whole;
 };
 modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  modf_result_vec4 result = {fract, whole};
+  modf_result_vec4 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   modf_result_vec4 res = tint_modf((1.0f).xxxx);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_ec2dbc();
+  modf_4bfced();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.fxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.fxc.hlsl
index 1610de1..043bbab 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float4 whole;
 };
 modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  modf_result_vec4 result = {fract, whole};
+  modf_result_vec4 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   modf_result_vec4 res = tint_modf((1.0f).xxxx);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_ec2dbc();
+  modf_4bfced();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.glsl
index 7792ce9..7c7e682 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   modf_result_vec4 res = tint_modf(vec4(1.0f));
 }
 
 vec4 vertex_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   modf_result_vec4 res = tint_modf(vec4(1.0f));
 }
 
 void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   modf_result_vec4 res = tint_modf(vec4(1.0f));
 }
 
 void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.msl
index ea4b856..3b5da9c 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float4 whole;
 };
 modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result_vec4 result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   modf_result_vec4 res = tint_modf(float4(1.0f));
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_ec2dbc();
+  modf_4bfced();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
 kernel void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.spvasm
index 61b2faa..2a58dd4 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_ec2dbc "modf_ec2dbc"
+               OpName %modf_4bfced "modf_4bfced"
                OpName %__modf_result_vec4 "__modf_result_vec4"
                OpMemberName %__modf_result_vec4 0 "fract"
                OpMemberName %__modf_result_vec4 1 "whole"
@@ -42,7 +42,7 @@
 %_ptr_Function___modf_result_vec4 = OpTypePointer Function %__modf_result_vec4
          %20 = OpConstantNull %__modf_result_vec4
          %21 = OpTypeFunction %v4float
-%modf_ec2dbc = OpFunction %void None %9
+%modf_4bfced = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___modf_result_vec4 Function %20
          %13 = OpExtInst %__modf_result_vec4 %15 ModfStruct %17
@@ -51,7 +51,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %21
          %23 = OpLabel
-         %24 = OpFunctionCall %void %modf_ec2dbc
+         %24 = OpFunctionCall %void %modf_4bfced
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -63,11 +63,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %29 = OpLabel
-         %30 = OpFunctionCall %void %modf_ec2dbc
+         %30 = OpFunctionCall %void %modf_4bfced
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_ec2dbc
+         %33 = OpFunctionCall %void %modf_4bfced
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.wgsl
similarity index 74%
rename from test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.wgsl
index b06d9d7..0b04b87 100644
--- a/test/tint/builtins/gen/literal/modf/ec2dbc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/4bfced.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn modf_ec2dbc() {
+fn modf_4bfced() {
   var res = modf(vec4<f32>(1.0f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_ec2dbc();
+  modf_4bfced();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl
similarity index 86%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl
index e15a541..673bb25 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(vec<3, f32>) -> __modf_result_vec<3>
-fn modf_9b75f7() {
+// fn modf(vec<3, f32>) -> __modf_result_vec<3, f32>
+fn modf_5ea256() {
   var res = modf(vec3<f32>(1.f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_9b75f7();
+  modf_5ea256();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.dxc.hlsl
index b2fabab..a2c46f5 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float3 whole;
 };
 modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  modf_result_vec3 result = {fract, whole};
+  modf_result_vec3 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_9b75f7() {
+void modf_5ea256() {
   modf_result_vec3 res = tint_modf((1.0f).xxx);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_9b75f7();
+  modf_5ea256();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.fxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.fxc.hlsl
index b2fabab..a2c46f5 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float3 whole;
 };
 modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  modf_result_vec3 result = {fract, whole};
+  modf_result_vec3 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_9b75f7() {
+void modf_5ea256() {
   modf_result_vec3 res = tint_modf((1.0f).xxx);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_9b75f7();
+  modf_5ea256();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.glsl
index 9671037..7a727ec 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void modf_9b75f7() {
+void modf_5ea256() {
   modf_result_vec3 res = tint_modf(vec3(1.0f));
 }
 
 vec4 vertex_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void modf_9b75f7() {
+void modf_5ea256() {
   modf_result_vec3 res = tint_modf(vec3(1.0f));
 }
 
 void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void modf_9b75f7() {
+void modf_5ea256() {
   modf_result_vec3 res = tint_modf(vec3(1.0f));
 }
 
 void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.msl
index 652a8b6..33e7fa3 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float3 whole;
 };
 modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result_vec3 result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_9b75f7() {
+void modf_5ea256() {
   modf_result_vec3 res = tint_modf(float3(1.0f));
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_9b75f7();
+  modf_5ea256();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
 kernel void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.spvasm
index bac50d9..6762d61 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_9b75f7 "modf_9b75f7"
+               OpName %modf_5ea256 "modf_5ea256"
                OpName %__modf_result_vec3 "__modf_result_vec3"
                OpMemberName %__modf_result_vec3 0 "fract"
                OpMemberName %__modf_result_vec3 1 "whole"
@@ -43,7 +43,7 @@
 %_ptr_Function___modf_result_vec3 = OpTypePointer Function %__modf_result_vec3
          %21 = OpConstantNull %__modf_result_vec3
          %22 = OpTypeFunction %v4float
-%modf_9b75f7 = OpFunction %void None %9
+%modf_5ea256 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___modf_result_vec3 Function %21
          %13 = OpExtInst %__modf_result_vec3 %16 ModfStruct %18
@@ -52,7 +52,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %22
          %24 = OpLabel
-         %25 = OpFunctionCall %void %modf_9b75f7
+         %25 = OpFunctionCall %void %modf_5ea256
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -64,11 +64,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %30 = OpLabel
-         %31 = OpFunctionCall %void %modf_9b75f7
+         %31 = OpFunctionCall %void %modf_5ea256
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %33 = OpLabel
-         %34 = OpFunctionCall %void %modf_9b75f7
+         %34 = OpFunctionCall %void %modf_5ea256
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.wgsl
similarity index 74%
rename from test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.wgsl
index 6fc1a82..ea4142d 100644
--- a/test/tint/builtins/gen/literal/modf/9b75f7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/5ea256.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn modf_9b75f7() {
+fn modf_5ea256() {
   var res = modf(vec3<f32>(1.0f));
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_9b75f7();
+  modf_5ea256();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl
similarity index 87%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl
index 4ac7658..d0ffdaa 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,23 +21,23 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(f32) -> __modf_result
-fn modf_180fed() {
+// fn modf(f32) -> __modf_result<f32>
+fn modf_bbf7f7() {
   var res = modf(1.f);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_180fed();
+  modf_bbf7f7();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.dxc.hlsl
index 0f7a58d..020478a 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_180fed() {
+void modf_bbf7f7() {
   modf_result res = tint_modf(1.0f);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_180fed();
+  modf_bbf7f7();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.fxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.fxc.hlsl
index 0f7a58d..020478a 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_180fed() {
+void modf_bbf7f7() {
   modf_result res = tint_modf(1.0f);
 }
 
@@ -18,7 +17,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_180fed();
+  modf_bbf7f7();
   return (0.0f).xxxx;
 }
 
@@ -30,12 +29,12 @@
 }
 
 void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.glsl
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.glsl
index 2e96b3c..30917ac 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.glsl
@@ -12,12 +12,12 @@
 }
 
 
-void modf_180fed() {
+void modf_bbf7f7() {
   modf_result res = tint_modf(1.0f);
 }
 
 vec4 vertex_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return vec4(0.0f);
 }
 
@@ -44,12 +44,12 @@
 }
 
 
-void modf_180fed() {
+void modf_bbf7f7() {
   modf_result res = tint_modf(1.0f);
 }
 
 void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 void main() {
@@ -70,12 +70,12 @@
 }
 
 
-void modf_180fed() {
+void modf_bbf7f7() {
   modf_result res = tint_modf(1.0f);
 }
 
 void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.msl
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.msl
index b7ba9eb..250e830 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_180fed() {
+void modf_bbf7f7() {
   modf_result res = tint_modf(1.0f);
 }
 
@@ -21,7 +21,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_180fed();
+  modf_bbf7f7();
   return float4(0.0f);
 }
 
@@ -33,12 +33,12 @@
 }
 
 fragment void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
 kernel void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.spvasm
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.spvasm
index b90be4c..21a2358 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_180fed "modf_180fed"
+               OpName %modf_bbf7f7 "modf_bbf7f7"
                OpName %__modf_result "__modf_result"
                OpMemberName %__modf_result 0 "fract"
                OpMemberName %__modf_result 1 "whole"
@@ -41,7 +41,7 @@
 %_ptr_Function___modf_result = OpTypePointer Function %__modf_result
          %19 = OpConstantNull %__modf_result
          %20 = OpTypeFunction %v4float
-%modf_180fed = OpFunction %void None %9
+%modf_bbf7f7 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___modf_result Function %19
          %13 = OpExtInst %__modf_result %15 ModfStruct %float_1
@@ -50,7 +50,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %20
          %22 = OpLabel
-         %23 = OpFunctionCall %void %modf_180fed
+         %23 = OpFunctionCall %void %modf_bbf7f7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -62,11 +62,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %28 = OpLabel
-         %29 = OpFunctionCall %void %modf_180fed
+         %29 = OpFunctionCall %void %modf_bbf7f7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_180fed
+         %32 = OpFunctionCall %void %modf_bbf7f7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.wgsl
similarity index 73%
rename from test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.wgsl
rename to test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.wgsl
index c1fb535..31c86d6 100644
--- a/test/tint/builtins/gen/literal/modf/180fed.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/bbf7f7.wgsl.expected.wgsl
@@ -1,19 +1,19 @@
-fn modf_180fed() {
+fn modf_bbf7f7() {
   var res = modf(1.0f);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_180fed();
+  modf_bbf7f7();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/frexp/eabd40.wgsl
rename to test/tint/builtins/gen/var/frexp/4b2200.wgsl
index c378b99..2802b5f 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(f32) -> __frexp_result
-fn frexp_eabd40() {
+// fn frexp(f32) -> __frexp_result<f32>
+fn frexp_4b2200() {
   var arg_0 = 1.f;
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_eabd40();
+  frexp_4b2200();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl
similarity index 89%
rename from test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl
index a3e4195..8dcfcd2 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   float arg_0 = 1.0f;
   frexp_result res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_eabd40();
+  frexp_4b2200();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl
similarity index 89%
copy from test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl
index a3e4195..8dcfcd2 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   float arg_0 = 1.0f;
   frexp_result res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_eabd40();
+  frexp_4b2200();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.glsl
index 6d1a1b1..bcf42ce 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   float arg_0 = 1.0f;
   frexp_result res = tint_frexp(arg_0);
 }
 
 vec4 vertex_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   float arg_0 = 1.0f;
   frexp_result res = tint_frexp(arg_0);
 }
 
 void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   float arg_0 = 1.0f;
   frexp_result res = tint_frexp(arg_0);
 }
 
 void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.msl
similarity index 78%
rename from test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.msl
rename to test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.msl
index 3249522..3c34d9c 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int exp;
 };
 frexp_result tint_frexp(float param_0) {
-  int exp;
-  float sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_eabd40() {
+void frexp_4b2200() {
   float arg_0 = 1.0f;
   frexp_result res = tint_frexp(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_eabd40();
+  frexp_4b2200();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
 kernel void compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.spvasm
index 4b0fed2..b871068 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_eabd40 "frexp_eabd40"
+               OpName %frexp_4b2200 "frexp_4b2200"
                OpName %arg_0 "arg_0"
                OpName %__frexp_result "__frexp_result"
                OpMemberName %__frexp_result 0 "sig"
@@ -44,7 +44,7 @@
 %_ptr_Function___frexp_result = OpTypePointer Function %__frexp_result
          %23 = OpConstantNull %__frexp_result
          %24 = OpTypeFunction %v4float
-%frexp_eabd40 = OpFunction %void None %9
+%frexp_4b2200 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_float Function %8
         %res = OpVariable %_ptr_Function___frexp_result Function %23
@@ -56,7 +56,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %24
          %26 = OpLabel
-         %27 = OpFunctionCall %void %frexp_eabd40
+         %27 = OpFunctionCall %void %frexp_4b2200
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -68,11 +68,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %frexp_eabd40
+         %33 = OpFunctionCall %void %frexp_4b2200
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %frexp_eabd40
+         %36 = OpFunctionCall %void %frexp_4b2200
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.wgsl
similarity index 74%
rename from test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.wgsl
index 1c79907..c06eb39 100644
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/4b2200.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_eabd40() {
+fn frexp_4b2200() {
   var arg_0 = 1.0f;
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_eabd40();
+  frexp_4b2200();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_eabd40();
+  frexp_4b2200();
 }
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl
similarity index 86%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl
index bfbd388..4aab6cd 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(vec<4, f32>) -> __frexp_result_vec<4>
-fn frexp_3c4f48() {
+// fn frexp(vec<4, f32>) -> __frexp_result_vec<4, f32>
+fn frexp_77af93() {
   var arg_0 = vec4<f32>(1.f);
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_3c4f48();
+  frexp_77af93();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl
similarity index 90%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl
index 176553c..b828fd2 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   float4 arg_0 = (1.0f).xxxx;
   frexp_result_vec4 res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_3c4f48();
+  frexp_77af93();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl
similarity index 90%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl
index 176553c..b828fd2 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   float4 arg_0 = (1.0f).xxxx;
   frexp_result_vec4 res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_3c4f48();
+  frexp_77af93();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.glsl
index eb9b7d1..cf01df2 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   vec4 arg_0 = vec4(1.0f);
   frexp_result_vec4 res = tint_frexp(arg_0);
 }
 
 vec4 vertex_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   vec4 arg_0 = vec4(1.0f);
   frexp_result_vec4 res = tint_frexp(arg_0);
 }
 
 void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   vec4 arg_0 = vec4(1.0f);
   frexp_result_vec4 res = tint_frexp(arg_0);
 }
 
 void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.msl
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.msl
index 0b0f656..013a8f3 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int4 exp;
 };
 frexp_result_vec4 tint_frexp(float4 param_0) {
-  int4 exp;
-  float4 sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result_vec4 result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_3c4f48() {
+void frexp_77af93() {
   float4 arg_0 = float4(1.0f);
   frexp_result_vec4 res = tint_frexp(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_3c4f48();
+  frexp_77af93();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
 kernel void compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.spvasm
index e09db9d..42998a1 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_3c4f48 "frexp_3c4f48"
+               OpName %frexp_77af93 "frexp_77af93"
                OpName %arg_0 "arg_0"
                OpName %__frexp_result_vec4 "__frexp_result_vec4"
                OpMemberName %__frexp_result_vec4 0 "sig"
@@ -46,7 +46,7 @@
 %_ptr_Function___frexp_result_vec4 = OpTypePointer Function %__frexp_result_vec4
          %25 = OpConstantNull %__frexp_result_vec4
          %26 = OpTypeFunction %v4float
-%frexp_3c4f48 = OpFunction %void None %9
+%frexp_77af93 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v4float Function %5
         %res = OpVariable %_ptr_Function___frexp_result_vec4 Function %25
@@ -58,7 +58,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %26
          %28 = OpLabel
-         %29 = OpFunctionCall %void %frexp_3c4f48
+         %29 = OpFunctionCall %void %frexp_77af93
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -70,11 +70,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %frexp_3c4f48
+         %35 = OpFunctionCall %void %frexp_77af93
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %37 = OpLabel
-         %38 = OpFunctionCall %void %frexp_3c4f48
+         %38 = OpFunctionCall %void %frexp_77af93
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.wgsl
similarity index 75%
rename from test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.wgsl
index 37c167f..b07da65 100644
--- a/test/tint/builtins/gen/var/frexp/3c4f48.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/77af93.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_3c4f48() {
+fn frexp_77af93() {
   var arg_0 = vec4<f32>(1.0f);
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_3c4f48();
+  frexp_77af93();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_3c4f48();
+  frexp_77af93();
 }
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl b/test/tint/builtins/gen/var/frexp/979800.wgsl
similarity index 86%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl
rename to test/tint/builtins/gen/var/frexp/979800.wgsl
index f323a47..500cf91 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(vec<3, f32>) -> __frexp_result_vec<3>
-fn frexp_368997() {
+// fn frexp(vec<3, f32>) -> __frexp_result_vec<3, f32>
+fn frexp_979800() {
   var arg_0 = vec3<f32>(1.f);
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_368997();
+  frexp_979800();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_368997();
+  frexp_979800();
 }
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl
similarity index 90%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl
index a453143..a15f989 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_368997() {
+void frexp_979800() {
   float3 arg_0 = (1.0f).xxx;
   frexp_result_vec3 res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_368997();
+  frexp_979800();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl
similarity index 90%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl
index a453143..a15f989 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_368997() {
+void frexp_979800() {
   float3 arg_0 = (1.0f).xxx;
   frexp_result_vec3 res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_368997();
+  frexp_979800();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/frexp/979800.wgsl.expected.glsl
index 70fcae6..256584b 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void frexp_368997() {
+void frexp_979800() {
   vec3 arg_0 = vec3(1.0f);
   frexp_result_vec3 res = tint_frexp(arg_0);
 }
 
 vec4 vertex_main() {
-  frexp_368997();
+  frexp_979800();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void frexp_368997() {
+void frexp_979800() {
   vec3 arg_0 = vec3(1.0f);
   frexp_result_vec3 res = tint_frexp(arg_0);
 }
 
 void fragment_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void frexp_368997() {
+void frexp_979800() {
   vec3 arg_0 = vec3(1.0f);
   frexp_result_vec3 res = tint_frexp(arg_0);
 }
 
 void compute_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl.expected.msl
rename to test/tint/builtins/gen/var/frexp/979800.wgsl.expected.msl
index 880edbb..5f511cd 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int3 exp;
 };
 frexp_result_vec3 tint_frexp(float3 param_0) {
-  int3 exp;
-  float3 sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result_vec3 result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_368997() {
+void frexp_979800() {
   float3 arg_0 = float3(1.0f);
   frexp_result_vec3 res = tint_frexp(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_368997();
+  frexp_979800();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
 kernel void compute_main() {
-  frexp_368997();
+  frexp_979800();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/frexp/979800.wgsl.expected.spvasm
index 0fc5b26..2aed3d5 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_368997 "frexp_368997"
+               OpName %frexp_979800 "frexp_979800"
                OpName %arg_0 "arg_0"
                OpName %__frexp_result_vec3 "__frexp_result_vec3"
                OpMemberName %__frexp_result_vec3 0 "sig"
@@ -48,7 +48,7 @@
 %_ptr_Function___frexp_result_vec3 = OpTypePointer Function %__frexp_result_vec3
          %27 = OpConstantNull %__frexp_result_vec3
          %28 = OpTypeFunction %v4float
-%frexp_368997 = OpFunction %void None %9
+%frexp_979800 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v3float Function %18
         %res = OpVariable %_ptr_Function___frexp_result_vec3 Function %27
@@ -60,7 +60,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %28
          %30 = OpLabel
-         %31 = OpFunctionCall %void %frexp_368997
+         %31 = OpFunctionCall %void %frexp_979800
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -72,11 +72,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_368997
+         %37 = OpFunctionCall %void %frexp_979800
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %39 = OpLabel
-         %40 = OpFunctionCall %void %frexp_368997
+         %40 = OpFunctionCall %void %frexp_979800
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.wgsl
similarity index 75%
rename from test/tint/builtins/gen/var/frexp/368997.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/frexp/979800.wgsl.expected.wgsl
index 58847e0..529fccb 100644
--- a/test/tint/builtins/gen/var/frexp/368997.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/979800.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_368997() {
+fn frexp_979800() {
   var arg_0 = vec3<f32>(1.0f);
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_368997();
+  frexp_979800();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_368997();
+  frexp_979800();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_368997();
+  frexp_979800();
 }
diff --git a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.fxc.hlsl
deleted file mode 100644
index a3e4195..0000000
--- a/test/tint/builtins/gen/var/frexp/eabd40.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct frexp_result {
-  float sig;
-  int exp;
-};
-frexp_result tint_frexp(float param_0) {
-  float exp;
-  float sig = frexp(param_0, exp);
-  frexp_result result = {sig, int(exp)};
-  return result;
-}
-
-void frexp_eabd40() {
-  float arg_0 = 1.0f;
-  frexp_result res = tint_frexp(arg_0);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  frexp_eabd40();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  frexp_eabd40();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  frexp_eabd40();
-  return;
-}
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl
similarity index 86%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl
index 9e6857d..760e5f9 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn frexp(vec<2, f32>) -> __frexp_result_vec<2>
-fn frexp_4bdfc7() {
+// fn frexp(vec<2, f32>) -> __frexp_result_vec<2, f32>
+fn frexp_eb2421() {
   var arg_0 = vec2<f32>(1.f);
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl
similarity index 90%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl
index 2b1bb58..32121e6 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   float2 arg_0 = (1.0f).xx;
   frexp_result_vec2 res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl
similarity index 90%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.fxc.hlsl
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl
index 2b1bb58..32121e6 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
   return result;
 }
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   float2 arg_0 = (1.0f).xx;
   frexp_result_vec2 res = tint_frexp(arg_0);
 }
@@ -19,7 +19,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +31,12 @@
 }
 
 void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.glsl
index 9d88b61..a0dc656 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   vec2 arg_0 = vec2(1.0f);
   frexp_result_vec2 res = tint_frexp(arg_0);
 }
 
 vec4 vertex_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   vec2 arg_0 = vec2(1.0f);
   frexp_result_vec2 res = tint_frexp(arg_0);
 }
 
 void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   vec2 arg_0 = vec2(1.0f);
   frexp_result_vec2 res = tint_frexp(arg_0);
 }
 
 void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.msl
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.msl
index cd5d42b..95235f2 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.msl
@@ -7,12 +7,12 @@
   int2 exp;
 };
 frexp_result_vec2 tint_frexp(float2 param_0) {
-  int2 exp;
-  float2 sig = frexp(param_0, exp);
-  return {sig, exp};
+  frexp_result_vec2 result;
+  result.sig = frexp(param_0, result.exp);
+  return result;
 }
 
-void frexp_4bdfc7() {
+void frexp_eb2421() {
   float2 arg_0 = float2(1.0f);
   frexp_result_vec2 res = tint_frexp(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
 kernel void compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.spvasm
index a0d4a79..4703e9a 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %frexp_4bdfc7 "frexp_4bdfc7"
+               OpName %frexp_eb2421 "frexp_eb2421"
                OpName %arg_0 "arg_0"
                OpName %__frexp_result_vec2 "__frexp_result_vec2"
                OpMemberName %__frexp_result_vec2 0 "sig"
@@ -48,7 +48,7 @@
 %_ptr_Function___frexp_result_vec2 = OpTypePointer Function %__frexp_result_vec2
          %27 = OpConstantNull %__frexp_result_vec2
          %28 = OpTypeFunction %v4float
-%frexp_4bdfc7 = OpFunction %void None %9
+%frexp_eb2421 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v2float Function %18
         %res = OpVariable %_ptr_Function___frexp_result_vec2 Function %27
@@ -60,7 +60,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %28
          %30 = OpLabel
-         %31 = OpFunctionCall %void %frexp_4bdfc7
+         %31 = OpFunctionCall %void %frexp_eb2421
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -72,11 +72,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_4bdfc7
+         %37 = OpFunctionCall %void %frexp_eb2421
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %39 = OpLabel
-         %40 = OpFunctionCall %void %frexp_4bdfc7
+         %40 = OpFunctionCall %void %frexp_eb2421
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.wgsl
similarity index 75%
rename from test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.wgsl
index 476cafe..83b52e8 100644
--- a/test/tint/builtins/gen/var/frexp/4bdfc7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/eb2421.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn frexp_4bdfc7() {
+fn frexp_eb2421() {
   var arg_0 = vec2<f32>(1.0f);
   var res = frexp(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  frexp_4bdfc7();
+  frexp_eb2421();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  frexp_4bdfc7();
+  frexp_eb2421();
 }
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 9e70752..0000000
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct modf_result {
-  float fract;
-  float whole;
-};
-modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
-  return result;
-}
-
-void modf_180fed() {
-  float arg_0 = 1.0f;
-  modf_result res = tint_modf(arg_0);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  modf_180fed();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  modf_180fed();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  modf_180fed();
-  return;
-}
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl b/test/tint/builtins/gen/var/modf/2d50da.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/modf/f5f20d.wgsl
rename to test/tint/builtins/gen/var/modf/2d50da.wgsl
index 1e22ffa..d8f067b 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(vec<2, f32>) -> __modf_result_vec<2>
-fn modf_f5f20d() {
+// fn modf(vec<2, f32>) -> __modf_result_vec<2, f32>
+fn modf_2d50da() {
   var arg_0 = vec2<f32>(1.f);
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_f5f20d();
+  modf_2d50da();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.dxc.hlsl
index 85b34aa..bf9728e 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float2 whole;
 };
 modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  modf_result_vec2 result = {fract, whole};
+  modf_result_vec2 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_f5f20d() {
+void modf_2d50da() {
   float2 arg_0 = (1.0f).xx;
   modf_result_vec2 res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_f5f20d();
+  modf_2d50da();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.fxc.hlsl
similarity index 77%
copy from test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.fxc.hlsl
index 85b34aa..bf9728e 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float2 whole;
 };
 modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  modf_result_vec2 result = {fract, whole};
+  modf_result_vec2 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_f5f20d() {
+void modf_2d50da() {
   float2 arg_0 = (1.0f).xx;
   modf_result_vec2 res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_f5f20d();
+  modf_2d50da();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.glsl
similarity index 92%
rename from test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.glsl
index 9e92000..a1998b9 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void modf_f5f20d() {
+void modf_2d50da() {
   vec2 arg_0 = vec2(1.0f);
   modf_result_vec2 res = tint_modf(arg_0);
 }
 
 vec4 vertex_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void modf_f5f20d() {
+void modf_2d50da() {
   vec2 arg_0 = vec2(1.0f);
   modf_result_vec2 res = tint_modf(arg_0);
 }
 
 void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void modf_f5f20d() {
+void modf_2d50da() {
   vec2 arg_0 = vec2(1.0f);
   modf_result_vec2 res = tint_modf(arg_0);
 }
 
 void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.msl
rename to test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.msl
index 14d0f6f..7579576 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float2 whole;
 };
 modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result_vec2 result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_f5f20d() {
+void modf_2d50da() {
   float2 arg_0 = float2(1.0f);
   modf_result_vec2 res = tint_modf(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_f5f20d();
+  modf_2d50da();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
 kernel void compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.spvasm
index 0b24482..9e6337b 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_f5f20d "modf_f5f20d"
+               OpName %modf_2d50da "modf_2d50da"
                OpName %arg_0 "arg_0"
                OpName %__modf_result_vec2 "__modf_result_vec2"
                OpMemberName %__modf_result_vec2 0 "fract"
@@ -46,7 +46,7 @@
 %_ptr_Function___modf_result_vec2 = OpTypePointer Function %__modf_result_vec2
          %25 = OpConstantNull %__modf_result_vec2
          %26 = OpTypeFunction %v4float
-%modf_f5f20d = OpFunction %void None %9
+%modf_2d50da = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v2float Function %18
         %res = OpVariable %_ptr_Function___modf_result_vec2 Function %25
@@ -58,7 +58,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %26
          %28 = OpLabel
-         %29 = OpFunctionCall %void %modf_f5f20d
+         %29 = OpFunctionCall %void %modf_2d50da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -70,11 +70,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_f5f20d
+         %35 = OpFunctionCall %void %modf_2d50da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %37 = OpLabel
-         %38 = OpFunctionCall %void %modf_f5f20d
+         %38 = OpFunctionCall %void %modf_2d50da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.wgsl
similarity index 76%
rename from test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.wgsl
index 0e23a25..baa5039 100644
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/2d50da.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_f5f20d() {
+fn modf_2d50da() {
   var arg_0 = vec2<f32>(1.0f);
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_f5f20d();
+  modf_2d50da();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_f5f20d();
+  modf_2d50da();
 }
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl b/test/tint/builtins/gen/var/modf/4bfced.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/modf/ec2dbc.wgsl
rename to test/tint/builtins/gen/var/modf/4bfced.wgsl
index bb6ded0..4929415 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(vec<4, f32>) -> __modf_result_vec<4>
-fn modf_ec2dbc() {
+// fn modf(vec<4, f32>) -> __modf_result_vec<4, f32>
+fn modf_4bfced() {
   var arg_0 = vec4<f32>(1.f);
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_ec2dbc();
+  modf_4bfced();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.dxc.hlsl
index 171368d..0cfe790 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float4 whole;
 };
 modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  modf_result_vec4 result = {fract, whole};
+  modf_result_vec4 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   float4 arg_0 = (1.0f).xxxx;
   modf_result_vec4 res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_ec2dbc();
+  modf_4bfced();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.fxc.hlsl
similarity index 77%
copy from test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.fxc.hlsl
index 171368d..0cfe790 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float4 whole;
 };
 modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  modf_result_vec4 result = {fract, whole};
+  modf_result_vec4 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   float4 arg_0 = (1.0f).xxxx;
   modf_result_vec4 res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_ec2dbc();
+  modf_4bfced();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.glsl
similarity index 92%
rename from test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.glsl
index 891485b..5d5615b 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   vec4 arg_0 = vec4(1.0f);
   modf_result_vec4 res = tint_modf(arg_0);
 }
 
 vec4 vertex_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   vec4 arg_0 = vec4(1.0f);
   modf_result_vec4 res = tint_modf(arg_0);
 }
 
 void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   vec4 arg_0 = vec4(1.0f);
   modf_result_vec4 res = tint_modf(arg_0);
 }
 
 void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.msl
rename to test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.msl
index 58350e3..4bac39e 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float4 whole;
 };
 modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result_vec4 result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_ec2dbc() {
+void modf_4bfced() {
   float4 arg_0 = float4(1.0f);
   modf_result_vec4 res = tint_modf(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_ec2dbc();
+  modf_4bfced();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
 kernel void compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.spvasm
index 3b90f6d..44dedfe 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_ec2dbc "modf_ec2dbc"
+               OpName %modf_4bfced "modf_4bfced"
                OpName %arg_0 "arg_0"
                OpName %__modf_result_vec4 "__modf_result_vec4"
                OpMemberName %__modf_result_vec4 0 "fract"
@@ -44,7 +44,7 @@
 %_ptr_Function___modf_result_vec4 = OpTypePointer Function %__modf_result_vec4
          %23 = OpConstantNull %__modf_result_vec4
          %24 = OpTypeFunction %v4float
-%modf_ec2dbc = OpFunction %void None %9
+%modf_4bfced = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v4float Function %5
         %res = OpVariable %_ptr_Function___modf_result_vec4 Function %23
@@ -56,7 +56,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %24
          %26 = OpLabel
-         %27 = OpFunctionCall %void %modf_ec2dbc
+         %27 = OpFunctionCall %void %modf_4bfced
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -68,11 +68,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %32 = OpLabel
-         %33 = OpFunctionCall %void %modf_ec2dbc
+         %33 = OpFunctionCall %void %modf_4bfced
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %35 = OpLabel
-         %36 = OpFunctionCall %void %modf_ec2dbc
+         %36 = OpFunctionCall %void %modf_4bfced
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.wgsl
similarity index 76%
rename from test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.wgsl
index 5e010e0..cff6f57 100644
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/4bfced.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_ec2dbc() {
+fn modf_4bfced() {
   var arg_0 = vec4<f32>(1.0f);
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_ec2dbc();
+  modf_4bfced();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_ec2dbc();
+  modf_4bfced();
 }
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl b/test/tint/builtins/gen/var/modf/5ea256.wgsl
similarity index 87%
rename from test/tint/builtins/gen/var/modf/9b75f7.wgsl
rename to test/tint/builtins/gen/var/modf/5ea256.wgsl
index 3afdb09..f85cfeb 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(vec<3, f32>) -> __modf_result_vec<3>
-fn modf_9b75f7() {
+// fn modf(vec<3, f32>) -> __modf_result_vec<3, f32>
+fn modf_5ea256() {
   var arg_0 = vec3<f32>(1.f);
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_9b75f7();
+  modf_5ea256();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.dxc.hlsl
index 3ced527..ffd6a12 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float3 whole;
 };
 modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  modf_result_vec3 result = {fract, whole};
+  modf_result_vec3 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_9b75f7() {
+void modf_5ea256() {
   float3 arg_0 = (1.0f).xxx;
   modf_result_vec3 res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_9b75f7();
+  modf_5ea256();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.fxc.hlsl
similarity index 77%
copy from test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.fxc.hlsl
index 3ced527..ffd6a12 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float3 whole;
 };
 modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  modf_result_vec3 result = {fract, whole};
+  modf_result_vec3 result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_9b75f7() {
+void modf_5ea256() {
   float3 arg_0 = (1.0f).xxx;
   modf_result_vec3 res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_9b75f7();
+  modf_5ea256();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.glsl
similarity index 92%
rename from test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.glsl
index 857d89e..021cf81 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void modf_9b75f7() {
+void modf_5ea256() {
   vec3 arg_0 = vec3(1.0f);
   modf_result_vec3 res = tint_modf(arg_0);
 }
 
 vec4 vertex_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void modf_9b75f7() {
+void modf_5ea256() {
   vec3 arg_0 = vec3(1.0f);
   modf_result_vec3 res = tint_modf(arg_0);
 }
 
 void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void modf_9b75f7() {
+void modf_5ea256() {
   vec3 arg_0 = vec3(1.0f);
   modf_result_vec3 res = tint_modf(arg_0);
 }
 
 void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.msl
rename to test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.msl
index 465974d..fa5d28a 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float3 whole;
 };
 modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result_vec3 result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_9b75f7() {
+void modf_5ea256() {
   float3 arg_0 = float3(1.0f);
   modf_result_vec3 res = tint_modf(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_9b75f7();
+  modf_5ea256();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
 kernel void compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.spvasm
similarity index 93%
rename from test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.spvasm
index 247b3bb..1587506 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_9b75f7 "modf_9b75f7"
+               OpName %modf_5ea256 "modf_5ea256"
                OpName %arg_0 "arg_0"
                OpName %__modf_result_vec3 "__modf_result_vec3"
                OpMemberName %__modf_result_vec3 0 "fract"
@@ -46,7 +46,7 @@
 %_ptr_Function___modf_result_vec3 = OpTypePointer Function %__modf_result_vec3
          %25 = OpConstantNull %__modf_result_vec3
          %26 = OpTypeFunction %v4float
-%modf_9b75f7 = OpFunction %void None %9
+%modf_5ea256 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v3float Function %18
         %res = OpVariable %_ptr_Function___modf_result_vec3 Function %25
@@ -58,7 +58,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %26
          %28 = OpLabel
-         %29 = OpFunctionCall %void %modf_9b75f7
+         %29 = OpFunctionCall %void %modf_5ea256
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -70,11 +70,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_9b75f7
+         %35 = OpFunctionCall %void %modf_5ea256
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %37 = OpLabel
-         %38 = OpFunctionCall %void %modf_9b75f7
+         %38 = OpFunctionCall %void %modf_5ea256
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.wgsl
similarity index 76%
rename from test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.wgsl
index 0442334..5180d14 100644
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/5ea256.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_9b75f7() {
+fn modf_5ea256() {
   var arg_0 = vec3<f32>(1.0f);
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_9b75f7();
+  modf_5ea256();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_9b75f7();
+  modf_5ea256();
 }
diff --git a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 3ced527..0000000
--- a/test/tint/builtins/gen/var/modf/9b75f7.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct modf_result_vec3 {
-  float3 fract;
-  float3 whole;
-};
-modf_result_vec3 tint_modf(float3 param_0) {
-  float3 whole;
-  float3 fract = modf(param_0, whole);
-  modf_result_vec3 result = {fract, whole};
-  return result;
-}
-
-void modf_9b75f7() {
-  float3 arg_0 = (1.0f).xxx;
-  modf_result_vec3 res = tint_modf(arg_0);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  modf_9b75f7();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  modf_9b75f7();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  modf_9b75f7();
-  return;
-}
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl
similarity index 88%
rename from test/tint/builtins/gen/var/modf/180fed.wgsl
rename to test/tint/builtins/gen/var/modf/bbf7f7.wgsl
index 5a2ca72..60ab469 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl
@@ -1,4 +1,4 @@
-// Copyright 2021 The Tint Authors.
+// Copyright 2022 The Tint Authors.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -21,24 +21,24 @@
 ////////////////////////////////////////////////////////////////////////////////
 
 
-// fn modf(f32) -> __modf_result
-fn modf_180fed() {
+// fn modf(f32) -> __modf_result<f32>
+fn modf_bbf7f7() {
   var arg_0 = 1.f;
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_180fed();
+  modf_bbf7f7();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.dxc.hlsl
similarity index 77%
rename from test/tint/builtins/gen/var/modf/180fed.wgsl.expected.dxc.hlsl
rename to test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.dxc.hlsl
index 9e70752..39adf2d 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.dxc.hlsl
@@ -3,13 +3,12 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_180fed() {
+void modf_bbf7f7() {
   float arg_0 = 1.0f;
   modf_result res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_180fed();
+  modf_bbf7f7();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.fxc.hlsl
similarity index 77%
copy from test/tint/builtins/gen/var/modf/180fed.wgsl.expected.dxc.hlsl
copy to test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.fxc.hlsl
index 9e70752..39adf2d 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.fxc.hlsl
@@ -3,13 +3,12 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
-void modf_180fed() {
+void modf_bbf7f7() {
   float arg_0 = 1.0f;
   modf_result res = tint_modf(arg_0);
 }
@@ -19,7 +18,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_180fed();
+  modf_bbf7f7();
   return (0.0f).xxxx;
 }
 
@@ -31,12 +30,12 @@
 }
 
 void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
 [numthreads(1, 1, 1)]
 void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.glsl
similarity index 91%
rename from test/tint/builtins/gen/var/modf/180fed.wgsl.expected.glsl
rename to test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.glsl
index c3d2897..4907635 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.glsl
@@ -12,13 +12,13 @@
 }
 
 
-void modf_180fed() {
+void modf_bbf7f7() {
   float arg_0 = 1.0f;
   modf_result res = tint_modf(arg_0);
 }
 
 vec4 vertex_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return vec4(0.0f);
 }
 
@@ -45,13 +45,13 @@
 }
 
 
-void modf_180fed() {
+void modf_bbf7f7() {
   float arg_0 = 1.0f;
   modf_result res = tint_modf(arg_0);
 }
 
 void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 void main() {
@@ -72,13 +72,13 @@
 }
 
 
-void modf_180fed() {
+void modf_bbf7f7() {
   float arg_0 = 1.0f;
   modf_result res = tint_modf(arg_0);
 }
 
 void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.msl
similarity index 79%
rename from test/tint/builtins/gen/var/modf/180fed.wgsl.expected.msl
rename to test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.msl
index 2dc20e6..2ef6251 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.msl
@@ -7,12 +7,12 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
-void modf_180fed() {
+void modf_bbf7f7() {
   float arg_0 = 1.0f;
   modf_result res = tint_modf(arg_0);
 }
@@ -22,7 +22,7 @@
 };
 
 float4 vertex_main_inner() {
-  modf_180fed();
+  modf_bbf7f7();
   return float4(0.0f);
 }
 
@@ -34,12 +34,12 @@
 }
 
 fragment void fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
 kernel void compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
   return;
 }
 
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.spvasm
similarity index 92%
rename from test/tint/builtins/gen/var/modf/180fed.wgsl.expected.spvasm
rename to test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.spvasm
index 67e2e30..97fe510 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.spvasm
@@ -13,7 +13,7 @@
                OpExecutionMode %compute_main LocalSize 1 1 1
                OpName %value "value"
                OpName %vertex_point_size "vertex_point_size"
-               OpName %modf_180fed "modf_180fed"
+               OpName %modf_bbf7f7 "modf_bbf7f7"
                OpName %arg_0 "arg_0"
                OpName %__modf_result "__modf_result"
                OpMemberName %__modf_result 0 "fract"
@@ -43,7 +43,7 @@
 %_ptr_Function___modf_result = OpTypePointer Function %__modf_result
          %22 = OpConstantNull %__modf_result
          %23 = OpTypeFunction %v4float
-%modf_180fed = OpFunction %void None %9
+%modf_bbf7f7 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_float Function %8
         %res = OpVariable %_ptr_Function___modf_result Function %22
@@ -55,7 +55,7 @@
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %23
          %25 = OpLabel
-         %26 = OpFunctionCall %void %modf_180fed
+         %26 = OpFunctionCall %void %modf_bbf7f7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
@@ -67,11 +67,11 @@
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
          %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_180fed
+         %32 = OpFunctionCall %void %modf_bbf7f7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
          %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_180fed
+         %35 = OpFunctionCall %void %modf_bbf7f7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.wgsl
similarity index 75%
rename from test/tint/builtins/gen/var/modf/180fed.wgsl.expected.wgsl
rename to test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.wgsl
index 9b9d885..0ebdc4b 100644
--- a/test/tint/builtins/gen/var/modf/180fed.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/bbf7f7.wgsl.expected.wgsl
@@ -1,20 +1,20 @@
-fn modf_180fed() {
+fn modf_bbf7f7() {
   var arg_0 = 1.0f;
   var res = modf(arg_0);
 }
 
 @vertex
 fn vertex_main() -> @builtin(position) vec4<f32> {
-  modf_180fed();
+  modf_bbf7f7();
   return vec4<f32>();
 }
 
 @fragment
 fn fragment_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
 
 @compute @workgroup_size(1)
 fn compute_main() {
-  modf_180fed();
+  modf_bbf7f7();
 }
diff --git a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 171368d..0000000
--- a/test/tint/builtins/gen/var/modf/ec2dbc.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct modf_result_vec4 {
-  float4 fract;
-  float4 whole;
-};
-modf_result_vec4 tint_modf(float4 param_0) {
-  float4 whole;
-  float4 fract = modf(param_0, whole);
-  modf_result_vec4 result = {fract, whole};
-  return result;
-}
-
-void modf_ec2dbc() {
-  float4 arg_0 = (1.0f).xxxx;
-  modf_result_vec4 res = tint_modf(arg_0);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  modf_ec2dbc();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  modf_ec2dbc();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  modf_ec2dbc();
-  return;
-}
diff --git a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 85b34aa..0000000
--- a/test/tint/builtins/gen/var/modf/f5f20d.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,42 +0,0 @@
-struct modf_result_vec2 {
-  float2 fract;
-  float2 whole;
-};
-modf_result_vec2 tint_modf(float2 param_0) {
-  float2 whole;
-  float2 fract = modf(param_0, whole);
-  modf_result_vec2 result = {fract, whole};
-  return result;
-}
-
-void modf_f5f20d() {
-  float2 arg_0 = (1.0f).xx;
-  modf_result_vec2 res = tint_modf(arg_0);
-}
-
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
-float4 vertex_main_inner() {
-  modf_f5f20d();
-  return (0.0f).xxxx;
-}
-
-tint_symbol vertex_main() {
-  const float4 inner_result = vertex_main_inner();
-  tint_symbol wrapper_result = (tint_symbol)0;
-  wrapper_result.value = inner_result;
-  return wrapper_result;
-}
-
-void fragment_main() {
-  modf_f5f20d();
-  return;
-}
-
-[numthreads(1, 1, 1)]
-void compute_main() {
-  modf_f5f20d();
-  return;
-}
diff --git a/test/tint/builtins/modf.wgsl.expected.dxc.hlsl b/test/tint/builtins/modf.wgsl.expected.dxc.hlsl
index d2bdca4..6ea70f3 100644
--- a/test/tint/builtins/modf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/modf.wgsl.expected.dxc.hlsl
@@ -3,9 +3,8 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
diff --git a/test/tint/builtins/modf.wgsl.expected.fxc.hlsl b/test/tint/builtins/modf.wgsl.expected.fxc.hlsl
index d2bdca4..6ea70f3 100644
--- a/test/tint/builtins/modf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/modf.wgsl.expected.fxc.hlsl
@@ -3,9 +3,8 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  modf_result result = {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
   return result;
 }
 
diff --git a/test/tint/builtins/modf.wgsl.expected.msl b/test/tint/builtins/modf.wgsl.expected.msl
index 6f6cf69..108250d 100644
--- a/test/tint/builtins/modf.wgsl.expected.msl
+++ b/test/tint/builtins/modf.wgsl.expected.msl
@@ -7,9 +7,9 @@
   float whole;
 };
 modf_result tint_modf(float param_0) {
-  float whole;
-  float fract = modf(param_0, whole);
-  return {fract, whole};
+  modf_result result;
+  result.fract = modf(param_0, result.whole);
+  return result;
 }
 
 kernel void tint_symbol() {