Fix generation of f16 values.

The generator script was not using the test values for `f16`, they
always got a zero initialization. This CL fixes the script to generate
`f16` values.

Change-Id: I95e8f2c7007251a646de05b4f7fe0aad14e740f8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/109342
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/test/tint/builtins/gen/gen.wgsl.tmpl b/test/tint/builtins/gen/gen.wgsl.tmpl
index 0dfe879..dd70b6c 100644
--- a/test/tint/builtins/gen/gen.wgsl.tmpl
+++ b/test/tint/builtins/gen/gen.wgsl.tmpl
@@ -273,6 +273,7 @@
 {{-        if eq        $ty.Target.Name "i32"  -}}{{$value}}i
 {{-   else if eq        $ty.Target.Name "u32"  -}}{{$value}}u
 {{-   else if eq        $ty.Target.Name "f32"  -}}{{$float_value}}f
+{{-   else if eq        $ty.Target.Name "f16"  -}}{{$float_value}}h
 {{-   else if eq        $ty.Target.Name "fa"   -}}{{$float_value}}
 {{-   else if eq        $ty.Target.Name "ia"   -}}{{$value}}
 {{-   else if eq        $ty.Target.Name "bool" -}}true
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl
index 9319b46..b2db3f7 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(vec<3, f16>) -> vec<3, f16>
 fn abs_421ca3() {
-  var res: vec3<f16> = abs(vec3<f16>(f16()));
+  var res: vec3<f16> = abs(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.dxc.hlsl
index 602de2a..11f21b9 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_421ca3() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.glsl
index b924dc4..7cf6126 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_421ca3() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void abs_421ca3() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_421ca3() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.msl
index 77b5544..06dbe3c 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_421ca3() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.spvasm
index 1761fe3..dd58a96 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_421ca3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %abs_421ca3
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_421ca3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_421ca3
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_421ca3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_421ca3
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_421ca3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.wgsl
index e3f2507..35d4faa 100644
--- a/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/421ca3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_421ca3() {
-  var res : vec3<f16> = abs(vec3<f16>(f16()));
+  var res : vec3<f16> = abs(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl b/test/tint/builtins/gen/literal/abs/538d29.wgsl
index eaefc98..8e393c9 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(vec<4, f16>) -> vec<4, f16>
 fn abs_538d29() {
-  var res: vec4<f16> = abs(vec4<f16>(f16()));
+  var res: vec4<f16> = abs(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.dxc.hlsl
index c42ede9..dee1d6d 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_538d29() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.glsl
index cf355d6..5967742 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_538d29() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void abs_538d29() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_538d29() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.msl
index c8c9f6a..daab813 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_538d29() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.spvasm
index 707e86f..e897fcf 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_538d29 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %abs_538d29
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_538d29
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_538d29
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_538d29
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_538d29
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_538d29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.wgsl
index 5501b23..919eab8 100644
--- a/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/538d29.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_538d29() {
-  var res : vec4<f16> = abs(vec4<f16>(f16()));
+  var res : vec4<f16> = abs(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl
index d6c5261..e94d993 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(vec<2, f16>) -> vec<2, f16>
 fn abs_5ae4fe() {
-  var res: vec2<f16> = abs(vec2<f16>(f16()));
+  var res: vec2<f16> = abs(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.dxc.hlsl
index 70b7ca6..218d736 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_5ae4fe() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.glsl
index 1e08808..0211497 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_5ae4fe() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void abs_5ae4fe() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_5ae4fe() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.msl
index 8b1b5bf..7bd87a3 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_5ae4fe() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.spvasm
index abebb5f..49a91ec 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_5ae4fe = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %abs_5ae4fe
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_5ae4fe
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_5ae4fe
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_5ae4fe
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_5ae4fe
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_5ae4fe
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.wgsl
index c1e8f24..89f05c6 100644
--- a/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/5ae4fe.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_5ae4fe() {
-  var res : vec2<f16> = abs(vec2<f16>(f16()));
+  var res : vec2<f16> = abs(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl
index 63cc56d..622a040 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(f16) -> f16
 fn abs_fd247f() {
-  var res: f16 = abs(f16());
+  var res: f16 = abs(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.dxc.hlsl
index e9cf905..21a9542 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_fd247f() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.glsl
index 451b053..42d4ca1 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_fd247f() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void abs_fd247f() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_fd247f() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.msl
index 524a545..5b56192 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_fd247f() {
-  half res = 0.0h;
+  half res = 1.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.spvasm
index eb3438d..433ec40 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_fd247f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_0
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %abs_fd247f
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %abs_fd247f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %abs_fd247f
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_fd247f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_fd247f
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_fd247f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.wgsl
index 28cbd46..2701dbd 100644
--- a/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/fd247f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_fd247f() {
-  var res : f16 = abs(f16());
+  var res : f16 = abs(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl b/test/tint/builtins/gen/literal/acos/004aff.wgsl
index 35e62ea..6646047 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(vec<2, f16>) -> vec<2, f16>
 fn acos_004aff() {
-  var res: vec2<f16> = acos(vec2<f16>(f16()));
+  var res: vec2<f16> = acos(vec2<f16>(0.96891242171h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.dxc.hlsl
index 4b568a1..12356f0 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_004aff() {
-  vector<float16_t, 2> res = (float16_t(1.5703125h)).xx;
+  vector<float16_t, 2> res = (float16_t(0.250488281h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.glsl
index 4fc4516..015ed01 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_004aff() {
-  f16vec2 res = f16vec2(1.5703125hf);
+  f16vec2 res = f16vec2(0.250488281hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void acos_004aff() {
-  f16vec2 res = f16vec2(1.5703125hf);
+  f16vec2 res = f16vec2(0.250488281hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_004aff() {
-  f16vec2 res = f16vec2(1.5703125hf);
+  f16vec2 res = f16vec2(0.250488281hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.msl b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.msl
index 4f26080..67bf3ab 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_004aff() {
-  half2 res = half2(1.5703125h);
+  half2 res = half2(0.250488281h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.spvasm
index 3f2143c..34f105f 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.spvasm
@@ -36,8 +36,8 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-%half_0x1_92p_0 = OpConstant %half 0x1.92p+0
-         %16 = OpConstantComposite %v2half %half_0x1_92p_0 %half_0x1_92p_0
+%half_0x1_008pn2 = OpConstant %half 0x1.008p-2
+         %16 = OpConstantComposite %v2half %half_0x1_008pn2 %half_0x1_008pn2
 %_ptr_Function_v2half = OpTypePointer Function %v2half
          %19 = OpConstantNull %v2half
          %20 = OpTypeFunction %v4float
diff --git a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.wgsl
index 57a6cb0..dc52331 100644
--- a/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acos/004aff.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_004aff() {
-  var res : vec2<f16> = acos(vec2<f16>(f16()));
+  var res : vec2<f16> = acos(vec2<f16>(0.96875h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl b/test/tint/builtins/gen/literal/acos/203628.wgsl
index e5f2df8..886d04c 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(vec<4, f16>) -> vec<4, f16>
 fn acos_203628() {
-  var res: vec4<f16> = acos(vec4<f16>(f16()));
+  var res: vec4<f16> = acos(vec4<f16>(0.96891242171h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.dxc.hlsl
index 5e05dc0..1dff9cc 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_203628() {
-  vector<float16_t, 4> res = (float16_t(1.5703125h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(0.250488281h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.glsl
index d46fc9b..5831f92 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_203628() {
-  f16vec4 res = f16vec4(1.5703125hf);
+  f16vec4 res = f16vec4(0.250488281hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void acos_203628() {
-  f16vec4 res = f16vec4(1.5703125hf);
+  f16vec4 res = f16vec4(0.250488281hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_203628() {
-  f16vec4 res = f16vec4(1.5703125hf);
+  f16vec4 res = f16vec4(0.250488281hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.msl b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.msl
index b8aaeab..718ec84 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_203628() {
-  half4 res = half4(1.5703125h);
+  half4 res = half4(0.250488281h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.spvasm
index 396ce5a..f607fb5 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.spvasm
@@ -36,8 +36,8 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-%half_0x1_92p_0 = OpConstant %half 0x1.92p+0
-         %16 = OpConstantComposite %v4half %half_0x1_92p_0 %half_0x1_92p_0 %half_0x1_92p_0 %half_0x1_92p_0
+%half_0x1_008pn2 = OpConstant %half 0x1.008p-2
+         %16 = OpConstantComposite %v4half %half_0x1_008pn2 %half_0x1_008pn2 %half_0x1_008pn2 %half_0x1_008pn2
 %_ptr_Function_v4half = OpTypePointer Function %v4half
          %19 = OpConstantNull %v4half
          %20 = OpTypeFunction %v4float
diff --git a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.wgsl
index ebbc42e..1764ae7 100644
--- a/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acos/203628.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_203628() {
-  var res : vec4<f16> = acos(vec4<f16>(f16()));
+  var res : vec4<f16> = acos(vec4<f16>(0.96875h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl
index 959d129..f8fdc38 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(f16) -> f16
 fn acos_303e3d() {
-  var res: f16 = acos(f16());
+  var res: f16 = acos(0.96891242171h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.dxc.hlsl
index 15b68db..1ae3af9 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_303e3d() {
-  float16_t res = float16_t(1.5703125h);
+  float16_t res = float16_t(0.250488281h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.glsl
index 0ff0856..ffc7b25 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_303e3d() {
-  float16_t res = 1.5703125hf;
+  float16_t res = 0.250488281hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void acos_303e3d() {
-  float16_t res = 1.5703125hf;
+  float16_t res = 0.250488281hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_303e3d() {
-  float16_t res = 1.5703125hf;
+  float16_t res = 0.250488281hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.msl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.msl
index d605822..80a86d6 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_303e3d() {
-  half res = 1.5703125h;
+  half res = 0.250488281h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.spvasm
index 15253c4..6cccf82 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.spvasm
@@ -35,7 +35,7 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-%half_0x1_92p_0 = OpConstant %half 0x1.92p+0
+%half_0x1_008pn2 = OpConstant %half 0x1.008p-2
 %_ptr_Function_half = OpTypePointer Function %half
          %17 = OpConstantNull %half
          %18 = OpTypeFunction %v4float
@@ -43,7 +43,7 @@
 %acos_303e3d = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_half Function %17
-               OpStore %res %half_0x1_92p_0
+               OpStore %res %half_0x1_008pn2
                OpReturn
                OpFunctionEnd
 %vertex_main_inner = OpFunction %v4float None %18
diff --git a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.wgsl
index d9f5be3..6d509d4 100644
--- a/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acos/303e3d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_303e3d() {
-  var res : f16 = acos(f16());
+  var res : f16 = acos(0.96875h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl b/test/tint/builtins/gen/literal/acos/f47057.wgsl
index 9195ffb..16b5967 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(vec<3, f16>) -> vec<3, f16>
 fn acos_f47057() {
-  var res: vec3<f16> = acos(vec3<f16>(f16()));
+  var res: vec3<f16> = acos(vec3<f16>(0.96891242171h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.dxc.hlsl
index 87a5f7d..c972d2e 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_f47057() {
-  vector<float16_t, 3> res = (float16_t(1.5703125h)).xxx;
+  vector<float16_t, 3> res = (float16_t(0.250488281h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.glsl
index 60d4629..51cfd54 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_f47057() {
-  f16vec3 res = f16vec3(1.5703125hf);
+  f16vec3 res = f16vec3(0.250488281hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void acos_f47057() {
-  f16vec3 res = f16vec3(1.5703125hf);
+  f16vec3 res = f16vec3(0.250488281hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_f47057() {
-  f16vec3 res = f16vec3(1.5703125hf);
+  f16vec3 res = f16vec3(0.250488281hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.msl b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.msl
index 568f757..547e7db 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_f47057() {
-  half3 res = half3(1.5703125h);
+  half3 res = half3(0.250488281h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.spvasm
index 3d7723b..38f068a 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.spvasm
@@ -36,8 +36,8 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-%half_0x1_92p_0 = OpConstant %half 0x1.92p+0
-         %16 = OpConstantComposite %v3half %half_0x1_92p_0 %half_0x1_92p_0 %half_0x1_92p_0
+%half_0x1_008pn2 = OpConstant %half 0x1.008p-2
+         %16 = OpConstantComposite %v3half %half_0x1_008pn2 %half_0x1_008pn2 %half_0x1_008pn2
 %_ptr_Function_v3half = OpTypePointer Function %v3half
          %19 = OpConstantNull %v3half
          %20 = OpTypeFunction %v4float
diff --git a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.wgsl
index fe4125d..d718a2f 100644
--- a/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acos/f47057.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_f47057() {
-  var res : vec3<f16> = acos(vec3<f16>(f16()));
+  var res : vec3<f16> = acos(vec3<f16>(0.96875h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl
index a4b0dab..9b22332 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(vec<2, f16>) -> vec<2, f16>
 fn acosh_5f49d8() {
-  var res: vec2<f16> = acosh(vec2<f16>(f16()));
+  var res: vec2<f16> = acosh(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.dxc.hlsl
index 9ba3054..f595442 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_5f49d8() {
-  vector<float16_t, 2> res = tint_acosh((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = tint_acosh((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.glsl
index 1297122..15b49cb 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_5f49d8() {
-  f16vec2 res = tint_acosh(f16vec2(0.0hf));
+  f16vec2 res = tint_acosh(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 }
 
 void acosh_5f49d8() {
-  f16vec2 res = tint_acosh(f16vec2(0.0hf));
+  f16vec2 res = tint_acosh(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -50,7 +50,7 @@
 }
 
 void acosh_5f49d8() {
-  f16vec2 res = tint_acosh(f16vec2(0.0hf));
+  f16vec2 res = tint_acosh(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.msl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.msl
index 9245c57..54a7472 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_5f49d8() {
-  half2 res = tint_acosh(half2(0.0h));
+  half2 res = tint_acosh(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.spvasm
index 79bf1ae..833c13d 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.spvasm
@@ -59,7 +59,7 @@
 %acosh_5f49d8 = OpFunction %void None %24
          %27 = OpLabel
         %res = OpVariable %_ptr_Function_v2half Function %21
-         %28 = OpFunctionCall %v2half %tint_acosh %21
+         %28 = OpFunctionCall %v2half %tint_acosh %17
                OpStore %res %28
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.wgsl
index 54e3b93..edbedff 100644
--- a/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/5f49d8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_5f49d8() {
-  var res : vec2<f16> = acosh(vec2<f16>(f16()));
+  var res : vec2<f16> = acosh(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl
index 9b93d25..6984829 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(f16) -> f16
 fn acosh_a37dfe() {
-  var res: f16 = acosh(f16());
+  var res: f16 = acosh(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.dxc.hlsl
index 0a48295..7e00e58 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t res = tint_acosh(float16_t(0.0h));
+  float16_t res = tint_acosh(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.glsl
index e7752e3..53f6164 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t res = tint_acosh(0.0hf);
+  float16_t res = tint_acosh(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t res = tint_acosh(0.0hf);
+  float16_t res = tint_acosh(1.0hf);
 }
 
 void fragment_main() {
@@ -50,7 +50,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t res = tint_acosh(0.0hf);
+  float16_t res = tint_acosh(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.msl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.msl
index 09a8e2d..bc04673 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_a37dfe() {
-  half res = tint_acosh(0.0h);
+  half res = tint_acosh(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.spvasm
index e5071ef..a8f4cc6 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.spvasm
@@ -56,7 +56,7 @@
 %acosh_a37dfe = OpFunction %void None %21
          %24 = OpLabel
         %res = OpVariable %_ptr_Function_half Function %18
-         %25 = OpFunctionCall %half %tint_acosh %18
+         %25 = OpFunctionCall %half %tint_acosh %half_0x1p_0
                OpStore %res %25
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.wgsl
index 983b91c..ee0b95a 100644
--- a/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/a37dfe.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_a37dfe() {
-  var res : f16 = acosh(f16());
+  var res : f16 = acosh(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl
index 4f64c07..40e8501 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(vec<4, f16>) -> vec<4, f16>
 fn acosh_de60d8() {
-  var res: vec4<f16> = acosh(vec4<f16>(f16()));
+  var res: vec4<f16> = acosh(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.dxc.hlsl
index 5de3f3b..f4e9e04 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_de60d8() {
-  vector<float16_t, 4> res = tint_acosh((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = tint_acosh((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.glsl
index 439999f..7076bfa 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_de60d8() {
-  f16vec4 res = tint_acosh(f16vec4(0.0hf));
+  f16vec4 res = tint_acosh(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 }
 
 void acosh_de60d8() {
-  f16vec4 res = tint_acosh(f16vec4(0.0hf));
+  f16vec4 res = tint_acosh(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -50,7 +50,7 @@
 }
 
 void acosh_de60d8() {
-  f16vec4 res = tint_acosh(f16vec4(0.0hf));
+  f16vec4 res = tint_acosh(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.msl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.msl
index 39b26d7..6b8bdcc 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_de60d8() {
-  half4 res = tint_acosh(half4(0.0h));
+  half4 res = tint_acosh(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.spvasm
index 220c72a..0c0218a 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.spvasm
@@ -59,7 +59,7 @@
 %acosh_de60d8 = OpFunction %void None %24
          %27 = OpLabel
         %res = OpVariable %_ptr_Function_v4half Function %21
-         %28 = OpFunctionCall %v4half %tint_acosh %21
+         %28 = OpFunctionCall %v4half %tint_acosh %17
                OpStore %res %28
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.wgsl
index 1fdbcb0..9e2d557 100644
--- a/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/de60d8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_de60d8() {
-  var res : vec4<f16> = acosh(vec4<f16>(f16()));
+  var res : vec4<f16> = acosh(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl
index 40db5d3..192966a 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(vec<3, f16>) -> vec<3, f16>
 fn acosh_f56574() {
-  var res: vec3<f16> = acosh(vec3<f16>(f16()));
+  var res: vec3<f16> = acosh(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.dxc.hlsl
index 72b7eb7..738ab20 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_f56574() {
-  vector<float16_t, 3> res = tint_acosh((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = tint_acosh((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.glsl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.glsl
index 20527af..522b80a 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_f56574() {
-  f16vec3 res = tint_acosh(f16vec3(0.0hf));
+  f16vec3 res = tint_acosh(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 }
 
 void acosh_f56574() {
-  f16vec3 res = tint_acosh(f16vec3(0.0hf));
+  f16vec3 res = tint_acosh(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -50,7 +50,7 @@
 }
 
 void acosh_f56574() {
-  f16vec3 res = tint_acosh(f16vec3(0.0hf));
+  f16vec3 res = tint_acosh(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.msl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.msl
index df354ba..ef82790 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_f56574() {
-  half3 res = tint_acosh(half3(0.0h));
+  half3 res = tint_acosh(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.spvasm
index c1bec97..a5502a5 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.spvasm
@@ -59,7 +59,7 @@
 %acosh_f56574 = OpFunction %void None %24
          %27 = OpLabel
         %res = OpVariable %_ptr_Function_v3half Function %21
-         %28 = OpFunctionCall %v3half %tint_acosh %21
+         %28 = OpFunctionCall %v3half %tint_acosh %17
                OpStore %res %28
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.wgsl
index 2eff0f0..ffb973a 100644
--- a/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/acosh/f56574.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_f56574() {
-  var res : vec3<f16> = acosh(vec3<f16>(f16()));
+  var res : vec3<f16> = acosh(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl
index 83b5763..a7cea13 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(f16) -> f16
 fn asin_11dfda() {
-  var res: f16 = asin(f16());
+  var res: f16 = asin(0.479425538604h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.dxc.hlsl
index 16da374..21b8491 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_11dfda() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(0.499755859h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.glsl
index cacb7fd..ee0dcab 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_11dfda() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.499755859hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asin_11dfda() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.499755859hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_11dfda() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.499755859hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.msl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.msl
index 7a0180c..5bb00b3 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_11dfda() {
-  half res = 0.0h;
+  half res = 0.499755859h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.spvasm
index 47a6e66..5d30cab 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_ffcpn2 = OpConstant %half 0x1.ffcp-2
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_11dfda = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1_ffcpn2
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %asin_11dfda
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %asin_11dfda
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %asin_11dfda
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %asin_11dfda
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %asin_11dfda
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %asin_11dfda
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.wgsl
index d1b5976..434bded 100644
--- a/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asin/11dfda.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_11dfda() {
-  var res : f16 = asin(f16());
+  var res : f16 = asin(0.479248047h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl
index d21bfd5..9291474 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(vec<3, f16>) -> vec<3, f16>
 fn asin_2d8e29() {
-  var res: vec3<f16> = asin(vec3<f16>(f16()));
+  var res: vec3<f16> = asin(vec3<f16>(0.479425538604h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.dxc.hlsl
index 6fdb472..b39bb3e 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_2d8e29() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(0.499755859h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.glsl
index 6d5368f..1f946d0 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_2d8e29() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.499755859hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asin_2d8e29() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.499755859hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_2d8e29() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.499755859hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.msl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.msl
index 22e88c9..f71b867 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_2d8e29() {
-  half3 res = half3(0.0h);
+  half3 res = half3(0.499755859h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.spvasm
index fd68919..2768bf7 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_ffcpn2 = OpConstant %half 0x1.ffcp-2
+         %16 = OpConstantComposite %v3half %half_0x1_ffcpn2 %half_0x1_ffcpn2 %half_0x1_ffcpn2
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_2d8e29 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %asin_2d8e29
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %asin_2d8e29
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %asin_2d8e29
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %asin_2d8e29
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asin_2d8e29
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %asin_2d8e29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.wgsl
index 2f97bd2..0a0207c 100644
--- a/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asin/2d8e29.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_2d8e29() {
-  var res : vec3<f16> = asin(vec3<f16>(f16()));
+  var res : vec3<f16> = asin(vec3<f16>(0.479248047h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl
index 44991ef..6e46f91 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(vec<4, f16>) -> vec<4, f16>
 fn asin_3cfbd4() {
-  var res: vec4<f16> = asin(vec4<f16>(f16()));
+  var res: vec4<f16> = asin(vec4<f16>(0.479425538604h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.dxc.hlsl
index 71cc9bf..62589e5 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_3cfbd4() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(0.499755859h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.glsl
index b2afaf4..1c60738 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_3cfbd4() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.499755859hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asin_3cfbd4() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.499755859hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_3cfbd4() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.499755859hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.msl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.msl
index dc266c6..6283ba0 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_3cfbd4() {
-  half4 res = half4(0.0h);
+  half4 res = half4(0.499755859h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.spvasm
index 7a57a86..f110573 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_ffcpn2 = OpConstant %half 0x1.ffcp-2
+         %16 = OpConstantComposite %v4half %half_0x1_ffcpn2 %half_0x1_ffcpn2 %half_0x1_ffcpn2 %half_0x1_ffcpn2
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_3cfbd4 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %asin_3cfbd4
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %asin_3cfbd4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %asin_3cfbd4
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %asin_3cfbd4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asin_3cfbd4
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %asin_3cfbd4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.wgsl
index 63c66a1..e646e00 100644
--- a/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asin/3cfbd4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_3cfbd4() {
-  var res : vec4<f16> = asin(vec4<f16>(f16()));
+  var res : vec4<f16> = asin(vec4<f16>(0.479248047h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl
index 591bac3..792e6f6 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(vec<2, f16>) -> vec<2, f16>
 fn asin_b4aced() {
-  var res: vec2<f16> = asin(vec2<f16>(f16()));
+  var res: vec2<f16> = asin(vec2<f16>(0.479425538604h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.dxc.hlsl
index dc1aea1..870f92b 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_b4aced() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(0.499755859h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.glsl
index 1018bd1..b462aa0 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_b4aced() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.499755859hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asin_b4aced() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.499755859hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_b4aced() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.499755859hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.msl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.msl
index 0bd37c5..56a0113 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_b4aced() {
-  half2 res = half2(0.0h);
+  half2 res = half2(0.499755859h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.spvasm
index f93ae26..d61e336 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_ffcpn2 = OpConstant %half 0x1.ffcp-2
+         %16 = OpConstantComposite %v2half %half_0x1_ffcpn2 %half_0x1_ffcpn2
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_b4aced = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %asin_b4aced
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %asin_b4aced
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %asin_b4aced
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %asin_b4aced
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asin_b4aced
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %asin_b4aced
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.wgsl
index 545e7c4..81b0b44 100644
--- a/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asin/b4aced.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_b4aced() {
-  var res : vec2<f16> = asin(vec2<f16>(f16()));
+  var res : vec2<f16> = asin(vec2<f16>(0.479248047h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl
index 884a6b2..661f08e 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(f16) -> f16
 fn asinh_468a48() {
-  var res: f16 = asinh(f16());
+  var res: f16 = asinh(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.dxc.hlsl
index 895988b..16f004b 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asinh_468a48() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(0.881347656h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.glsl
index 0b42f0a..d5da6f4 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_468a48() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.881347656hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asinh_468a48() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.881347656hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_468a48() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.881347656hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.msl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.msl
index 6f6d727..eecb9b7 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_468a48() {
-  half res = 0.0h;
+  half res = 0.881347656h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.spvasm
index 21f9b59..9e2b885 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_c34pn1 = OpConstant %half 0x1.c34p-1
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_468a48 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1_c34pn1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %asinh_468a48
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %asinh_468a48
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %asinh_468a48
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %asinh_468a48
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %asinh_468a48
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %asinh_468a48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.wgsl
index a546ede..fc555c0 100644
--- a/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/468a48.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_468a48() {
-  var res : f16 = asinh(f16());
+  var res : f16 = asinh(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl
index dfa3c29..d3df0c6 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(vec<4, f16>) -> vec<4, f16>
 fn asinh_95ab2b() {
-  var res: vec4<f16> = asinh(vec4<f16>(f16()));
+  var res: vec4<f16> = asinh(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.dxc.hlsl
index a429606b..aceecc0 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asinh_95ab2b() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(0.881347656h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.glsl
index d3e28ea..7033652 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_95ab2b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.881347656hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asinh_95ab2b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.881347656hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_95ab2b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.881347656hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.msl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.msl
index 6066d30..d294e1a 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_95ab2b() {
-  half4 res = half4(0.0h);
+  half4 res = half4(0.881347656h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.spvasm
index a85a653..8a5fa6a 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_c34pn1 = OpConstant %half 0x1.c34p-1
+         %16 = OpConstantComposite %v4half %half_0x1_c34pn1 %half_0x1_c34pn1 %half_0x1_c34pn1 %half_0x1_c34pn1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_95ab2b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %asinh_95ab2b
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %asinh_95ab2b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %asinh_95ab2b
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %asinh_95ab2b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asinh_95ab2b
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %asinh_95ab2b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.wgsl
index ca02f94..e22c6a8 100644
--- a/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/95ab2b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_95ab2b() {
-  var res : vec4<f16> = asinh(vec4<f16>(f16()));
+  var res : vec4<f16> = asinh(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl
index fa045bb..3b284fa 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(vec<2, f16>) -> vec<2, f16>
 fn asinh_ad8f8b() {
-  var res: vec2<f16> = asinh(vec2<f16>(f16()));
+  var res: vec2<f16> = asinh(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.dxc.hlsl
index fa23693..7a2f4f0 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asinh_ad8f8b() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(0.881347656h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.glsl
index 483c514..b6efd56 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_ad8f8b() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.881347656hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asinh_ad8f8b() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.881347656hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_ad8f8b() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.881347656hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.msl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.msl
index 9f70a7d..4d9d5b5 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_ad8f8b() {
-  half2 res = half2(0.0h);
+  half2 res = half2(0.881347656h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.spvasm
index f7cf120..027fbe2 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_c34pn1 = OpConstant %half 0x1.c34p-1
+         %16 = OpConstantComposite %v2half %half_0x1_c34pn1 %half_0x1_c34pn1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_ad8f8b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %asinh_ad8f8b
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %asinh_ad8f8b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %asinh_ad8f8b
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %asinh_ad8f8b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asinh_ad8f8b
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %asinh_ad8f8b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.wgsl
index 3bd274e..150062d 100644
--- a/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/ad8f8b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_ad8f8b() {
-  var res : vec2<f16> = asinh(vec2<f16>(f16()));
+  var res : vec2<f16> = asinh(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl
index 67d2c9d..8f84a91 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(vec<3, f16>) -> vec<3, f16>
 fn asinh_fb5e8c() {
-  var res: vec3<f16> = asinh(vec3<f16>(f16()));
+  var res: vec3<f16> = asinh(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.dxc.hlsl
index 30cea25..611ab3e 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asinh_fb5e8c() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(0.881347656h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.glsl
index 251733e..f5e2e87 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_fb5e8c() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.881347656hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void asinh_fb5e8c() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.881347656hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_fb5e8c() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.881347656hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.msl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.msl
index 5ca1c10..a7d247d 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_fb5e8c() {
-  half3 res = half3(0.0h);
+  half3 res = half3(0.881347656h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.spvasm
index ab6521d..50f3700 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_c34pn1 = OpConstant %half 0x1.c34p-1
+         %16 = OpConstantComposite %v3half %half_0x1_c34pn1 %half_0x1_c34pn1 %half_0x1_c34pn1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_fb5e8c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %asinh_fb5e8c
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %asinh_fb5e8c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %asinh_fb5e8c
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %asinh_fb5e8c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asinh_fb5e8c
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %asinh_fb5e8c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.wgsl
index 953a9d1..9187eb3 100644
--- a/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/fb5e8c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_fb5e8c() {
-  var res : vec3<f16> = asinh(vec3<f16>(f16()));
+  var res : vec3<f16> = asinh(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl b/test/tint/builtins/gen/literal/atan/19faea.wgsl
index 250ddc5..66ea29f 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(vec<4, f16>) -> vec<4, f16>
 fn atan_19faea() {
-  var res: vec4<f16> = atan(vec4<f16>(f16()));
+  var res: vec4<f16> = atan(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.dxc.hlsl
index db14b48..216328d 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_19faea() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(0.78515625h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.glsl
index ad63e47..7130595 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_19faea() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.78515625hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan_19faea() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.78515625hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_19faea() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.78515625hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.msl
index 183c560..0b34640 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_19faea() {
-  half4 res = half4(0.0h);
+  half4 res = half4(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.spvasm
index 4fa1e97..30a969f 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
+         %16 = OpConstantComposite %v4half %half_0x1_92pn1 %half_0x1_92pn1 %half_0x1_92pn1 %half_0x1_92pn1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_19faea = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atan_19faea
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atan_19faea
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atan_19faea
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atan_19faea
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan_19faea
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atan_19faea
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.wgsl
index ecac955..b0ac4df 100644
--- a/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/19faea.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_19faea() {
-  var res : vec4<f16> = atan(vec4<f16>(f16()));
+  var res : vec4<f16> = atan(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl
index 013ab6e..78b48d4 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(vec<2, f16>) -> vec<2, f16>
 fn atan_1e1764() {
-  var res: vec2<f16> = atan(vec2<f16>(f16()));
+  var res: vec2<f16> = atan(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.dxc.hlsl
index 04d8dbe..05f6914 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_1e1764() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(0.78515625h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.glsl
index f0bca04..5b0496c 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_1e1764() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.78515625hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan_1e1764() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.78515625hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_1e1764() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.78515625hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.msl
index ed6033e..b488b7e 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_1e1764() {
-  half2 res = half2(0.0h);
+  half2 res = half2(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.spvasm
index e51b794..b557b01 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
+         %16 = OpConstantComposite %v2half %half_0x1_92pn1 %half_0x1_92pn1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_1e1764 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atan_1e1764
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atan_1e1764
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atan_1e1764
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atan_1e1764
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan_1e1764
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atan_1e1764
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.wgsl
index 8278671..bf65b92 100644
--- a/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/1e1764.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_1e1764() {
-  var res : vec2<f16> = atan(vec2<f16>(f16()));
+  var res : vec2<f16> = atan(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl
index 766fcb3..32968c9 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(vec<3, f16>) -> vec<3, f16>
 fn atan_a5f421() {
-  var res: vec3<f16> = atan(vec3<f16>(f16()));
+  var res: vec3<f16> = atan(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.dxc.hlsl
index 913e3e2..effc7b5 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_a5f421() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(0.78515625h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.glsl
index ced4a20..85d1d52 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a5f421() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.78515625hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan_a5f421() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.78515625hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a5f421() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.78515625hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.msl
index fd9e130..e28095e 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_a5f421() {
-  half3 res = half3(0.0h);
+  half3 res = half3(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.spvasm
index 8464422..e7b6e05 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
+         %16 = OpConstantComposite %v3half %half_0x1_92pn1 %half_0x1_92pn1 %half_0x1_92pn1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_a5f421 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atan_a5f421
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atan_a5f421
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atan_a5f421
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atan_a5f421
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan_a5f421
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atan_a5f421
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.wgsl
index 356793c..3fdca85 100644
--- a/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/a5f421.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_a5f421() {
-  var res : vec3<f16> = atan(vec3<f16>(f16()));
+  var res : vec3<f16> = atan(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl
index 9467660..4fe638f 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(f16) -> f16
 fn atan_a7ba61() {
-  var res: f16 = atan(f16());
+  var res: f16 = atan(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.dxc.hlsl
index c68aeb5..7917730 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_a7ba61() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.glsl
index d6262bd..b1a4614 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a7ba61() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.78515625hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan_a7ba61() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.78515625hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a7ba61() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.78515625hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.msl
index c35f48f..fa27251 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_a7ba61() {
-  half res = 0.0h;
+  half res = 0.78515625h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.spvasm
index 7ff9f39..8e2d6b5 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_a7ba61 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1_92pn1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %atan_a7ba61
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %atan_a7ba61
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %atan_a7ba61
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %atan_a7ba61
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %atan_a7ba61
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %atan_a7ba61
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.wgsl
index 891c5e3..f589885 100644
--- a/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/a7ba61.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_a7ba61() {
-  var res : f16 = atan(f16());
+  var res : f16 = atan(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl
index 5a1889f..bd3fda3 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan2(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn atan2_21dfea() {
-  var res: vec3<f16> = atan2(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = atan2(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.dxc.hlsl
index f40c95d..e43a600 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan2_21dfea() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(0.78515625h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.glsl
index 489c3b5..51b0410 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_21dfea() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.78515625hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan2_21dfea() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.78515625hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_21dfea() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.78515625hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.msl
index 871202c..bea4a82 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan2_21dfea() {
-  half3 res = half3(0.0h);
+  half3 res = half3(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.spvasm
index 25707d7..57a1b0d 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
+         %16 = OpConstantComposite %v3half %half_0x1_92pn1 %half_0x1_92pn1 %half_0x1_92pn1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_21dfea = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atan2_21dfea
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atan2_21dfea
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atan2_21dfea
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atan2_21dfea
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan2_21dfea
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atan2_21dfea
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.wgsl
index a5251d4..9e00206 100644
--- a/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/21dfea.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan2_21dfea() {
-  var res : vec3<f16> = atan2(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = atan2(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl
index 6a5abcb..26219a8 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan2(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn atan2_93febc() {
-  var res: vec2<f16> = atan2(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = atan2(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.dxc.hlsl
index 29acbb2..8c872a0 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan2_93febc() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(0.78515625h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.glsl
index 1de833b..a3692f6 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_93febc() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.78515625hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan2_93febc() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.78515625hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_93febc() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.78515625hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.msl
index 7f6e188..1c73f44 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan2_93febc() {
-  half2 res = half2(0.0h);
+  half2 res = half2(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.spvasm
index 4404d85..40fbed8 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
+         %16 = OpConstantComposite %v2half %half_0x1_92pn1 %half_0x1_92pn1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_93febc = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atan2_93febc
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atan2_93febc
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atan2_93febc
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atan2_93febc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan2_93febc
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atan2_93febc
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.wgsl
index 23d923a..bc501ed 100644
--- a/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/93febc.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan2_93febc() {
-  var res : vec2<f16> = atan2(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = atan2(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl
index c22ba39..06f7c6b 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan2(f16, f16) -> f16
 fn atan2_ca698e() {
-  var res: f16 = atan2(f16(), f16());
+  var res: f16 = atan2(1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.dxc.hlsl
index 68471d9..f6e9588 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan2_ca698e() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.glsl
index d310b70..244e8eb 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_ca698e() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.78515625hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan2_ca698e() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.78515625hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_ca698e() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.78515625hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.msl
index f4e7539..a875213 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan2_ca698e() {
-  half res = 0.0h;
+  half res = 0.78515625h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.spvasm
index 63ae0e4..dee8585 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_ca698e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1_92pn1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %atan2_ca698e
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %atan2_ca698e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %atan2_ca698e
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %atan2_ca698e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %atan2_ca698e
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %atan2_ca698e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.wgsl
index fe62d18..26f362d 100644
--- a/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/ca698e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan2_ca698e() {
-  var res : f16 = atan2(f16(), f16());
+  var res : f16 = atan2(1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl
index bc8410c..c4f18a7 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan2(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn atan2_d983ab() {
-  var res: vec4<f16> = atan2(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = atan2(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.dxc.hlsl
index b7ee794..12db579 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan2_d983ab() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(0.78515625h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.glsl
index 6f6529d..0c70c90 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_d983ab() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.78515625hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atan2_d983ab() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.78515625hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_d983ab() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.78515625hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.msl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.msl
index 227ba1f..dbd659f 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan2_d983ab() {
-  half4 res = half4(0.0h);
+  half4 res = half4(0.78515625h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.spvasm
index d6c52b9..d0060ea 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_92pn1 = OpConstant %half 0x1.92p-1
+         %16 = OpConstantComposite %v4half %half_0x1_92pn1 %half_0x1_92pn1 %half_0x1_92pn1 %half_0x1_92pn1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_d983ab = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atan2_d983ab
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atan2_d983ab
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atan2_d983ab
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atan2_d983ab
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan2_d983ab
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atan2_d983ab
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.wgsl
index 50719cb..29a290c 100644
--- a/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/d983ab.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan2_d983ab() {
-  var res : vec4<f16> = atan2(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = atan2(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl
index f828156..7dd84b6 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(vec<2, f16>) -> vec<2, f16>
 fn atanh_5bf88d() {
-  var res: vec2<f16> = atanh(vec2<f16>(f16()));
+  var res: vec2<f16> = atanh(vec2<f16>(0.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.dxc.hlsl
index 1ab4777..f50d739 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atanh_5bf88d() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(0.548828125h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.glsl
index 17a23e6..2b14c65e 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_5bf88d() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.548828125hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atanh_5bf88d() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.548828125hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_5bf88d() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(0.548828125hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.msl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.msl
index eb31ae2..142f58e 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atanh_5bf88d() {
-  half2 res = half2(0.0h);
+  half2 res = half2(0.548828125h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.spvasm
index e89e54e..3bc631f 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_19pn1 = OpConstant %half 0x1.19p-1
+         %16 = OpConstantComposite %v2half %half_0x1_19pn1 %half_0x1_19pn1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atanh_5bf88d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atanh_5bf88d
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atanh_5bf88d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atanh_5bf88d
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atanh_5bf88d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atanh_5bf88d
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atanh_5bf88d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.wgsl
index b399e07..a4f24f6 100644
--- a/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/5bf88d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_5bf88d() {
-  var res : vec2<f16> = atanh(vec2<f16>(f16()));
+  var res : vec2<f16> = atanh(vec2<f16>(0.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl
index 2fa4e3c..f3d7acd 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(f16) -> f16
 fn atanh_d2d8cd() {
-  var res: f16 = atanh(f16());
+  var res: f16 = atanh(0.5h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.dxc.hlsl
index d4b3294..a915f4e 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atanh_d2d8cd() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(0.548828125h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.glsl
index 2164d93..7d40b3a 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_d2d8cd() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.548828125hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atanh_d2d8cd() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.548828125hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_d2d8cd() {
-  float16_t res = 0.0hf;
+  float16_t res = 0.548828125hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.msl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.msl
index 8d4995a..fecb05d 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atanh_d2d8cd() {
-  half res = 0.0h;
+  half res = 0.548828125h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.spvasm
index 343a043..3cf767b 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_19pn1 = OpConstant %half 0x1.19p-1
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atanh_d2d8cd = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1_19pn1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %atanh_d2d8cd
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %atanh_d2d8cd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %atanh_d2d8cd
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %atanh_d2d8cd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %atanh_d2d8cd
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %atanh_d2d8cd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.wgsl
index 7f12743..a71dd50 100644
--- a/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/d2d8cd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_d2d8cd() {
-  var res : f16 = atanh(f16());
+  var res : f16 = atanh(0.5h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl
index 23c6e10..5cdfb19 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(vec<4, f16>) -> vec<4, f16>
 fn atanh_e3b450() {
-  var res: vec4<f16> = atanh(vec4<f16>(f16()));
+  var res: vec4<f16> = atanh(vec4<f16>(0.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.dxc.hlsl
index f3ac16c..ddfc0ce 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atanh_e3b450() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(0.548828125h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.glsl
index 73f8e70..6f61acd 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_e3b450() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.548828125hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atanh_e3b450() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.548828125hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_e3b450() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(0.548828125hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.msl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.msl
index b659da6..585ed1c 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atanh_e3b450() {
-  half4 res = half4(0.0h);
+  half4 res = half4(0.548828125h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.spvasm
index 64e46bd..38694bb 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_19pn1 = OpConstant %half 0x1.19p-1
+         %16 = OpConstantComposite %v4half %half_0x1_19pn1 %half_0x1_19pn1 %half_0x1_19pn1 %half_0x1_19pn1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atanh_e3b450 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atanh_e3b450
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atanh_e3b450
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atanh_e3b450
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atanh_e3b450
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atanh_e3b450
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atanh_e3b450
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.wgsl
index d0a8577..a2b2337 100644
--- a/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/e3b450.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_e3b450() {
-  var res : vec4<f16> = atanh(vec4<f16>(f16()));
+  var res : vec4<f16> = atanh(vec4<f16>(0.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl
index 708c3b3..3995aab 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(vec<3, f16>) -> vec<3, f16>
 fn atanh_ec4b06() {
-  var res: vec3<f16> = atanh(vec3<f16>(f16()));
+  var res: vec3<f16> = atanh(vec3<f16>(0.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.dxc.hlsl
index fc6fa46..a7a9231 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atanh_ec4b06() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(0.548828125h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.glsl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.glsl
index fc48649..a9cbf80 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_ec4b06() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.548828125hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void atanh_ec4b06() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.548828125hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atanh_ec4b06() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(0.548828125hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.msl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.msl
index 1290948..5154b8c 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atanh_ec4b06() {
-  half3 res = half3(0.0h);
+  half3 res = half3(0.548828125h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.spvasm
index 49e6e5a..9842aa3 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_19pn1 = OpConstant %half 0x1.19p-1
+         %16 = OpConstantComposite %v3half %half_0x1_19pn1 %half_0x1_19pn1 %half_0x1_19pn1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atanh_ec4b06 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %atanh_ec4b06
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %atanh_ec4b06
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %atanh_ec4b06
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %atanh_ec4b06
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atanh_ec4b06
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %atanh_ec4b06
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.wgsl
index 4570d2b..26a5c3b 100644
--- a/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atanh/ec4b06.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_ec4b06() {
-  var res : vec3<f16> = atanh(vec3<f16>(f16()));
+  var res : vec3<f16> = atanh(vec3<f16>(0.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl
index 6705f27..d7838315 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(vec<3, f16>) -> vec<3, f16>
 fn ceil_09bf52() {
-  var res: vec3<f16> = ceil(vec3<f16>(f16()));
+  var res: vec3<f16> = ceil(vec3<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.dxc.hlsl
index 7bd42e4..375efff 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_09bf52() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(2.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.glsl
index 48a58ee..ec5f3bc 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_09bf52() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(2.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ceil_09bf52() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(2.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_09bf52() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(2.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.msl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.msl
index 8ff7786..46a5ec3 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_09bf52() {
-  half3 res = half3(0.0h);
+  half3 res = half3(2.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.spvasm
index 926482e..049a6c8 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_1 = OpConstant %half 0x1p+1
+         %16 = OpConstantComposite %v3half %half_0x1p_1 %half_0x1p_1 %half_0x1p_1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_09bf52 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %ceil_09bf52
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %ceil_09bf52
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %ceil_09bf52
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %ceil_09bf52
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %ceil_09bf52
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %ceil_09bf52
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.wgsl
index 1d5fc84..7c6fe63 100644
--- a/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/09bf52.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_09bf52() {
-  var res : vec3<f16> = ceil(vec3<f16>(f16()));
+  var res : vec3<f16> = ceil(vec3<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl
index 002bcdc..59ea5c4 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(vec<2, f16>) -> vec<2, f16>
 fn ceil_18c240() {
-  var res: vec2<f16> = ceil(vec2<f16>(f16()));
+  var res: vec2<f16> = ceil(vec2<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.dxc.hlsl
index 7d4e24b..4b5e394 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_18c240() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(2.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.glsl
index b63b07a..fca89d9 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_18c240() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(2.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ceil_18c240() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(2.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_18c240() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(2.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.msl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.msl
index 9e480ef..8881bb7 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_18c240() {
-  half2 res = half2(0.0h);
+  half2 res = half2(2.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.spvasm
index 7fe9ff4..2207042 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_1 = OpConstant %half 0x1p+1
+         %16 = OpConstantComposite %v2half %half_0x1p_1 %half_0x1p_1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_18c240 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %ceil_18c240
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %ceil_18c240
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %ceil_18c240
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %ceil_18c240
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %ceil_18c240
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %ceil_18c240
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.wgsl
index dad05fe..559f2e5 100644
--- a/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/18c240.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_18c240() {
-  var res : vec2<f16> = ceil(vec2<f16>(f16()));
+  var res : vec2<f16> = ceil(vec2<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl
index 0e7ce3c..6ee53d9 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(vec<4, f16>) -> vec<4, f16>
 fn ceil_4bca2a() {
-  var res: vec4<f16> = ceil(vec4<f16>(f16()));
+  var res: vec4<f16> = ceil(vec4<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.dxc.hlsl
index ba26727..f7c44b6 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_4bca2a() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(2.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.glsl
index ff7d3d7..221237f 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_4bca2a() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(2.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ceil_4bca2a() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(2.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_4bca2a() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(2.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.msl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.msl
index 046f92d..d870cea 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_4bca2a() {
-  half4 res = half4(0.0h);
+  half4 res = half4(2.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.spvasm
index abbd917..cff6dd3 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_1 = OpConstant %half 0x1p+1
+         %16 = OpConstantComposite %v4half %half_0x1p_1 %half_0x1p_1 %half_0x1p_1 %half_0x1p_1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_4bca2a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %ceil_4bca2a
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %ceil_4bca2a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %ceil_4bca2a
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %ceil_4bca2a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %ceil_4bca2a
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %ceil_4bca2a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.wgsl
index 881715f..0146378 100644
--- a/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/4bca2a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_4bca2a() {
-  var res : vec4<f16> = ceil(vec4<f16>(f16()));
+  var res : vec4<f16> = ceil(vec4<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl
index 439e88e..c494500 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(f16) -> f16
 fn ceil_f3f889() {
-  var res: f16 = ceil(f16());
+  var res: f16 = ceil(1.5h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.dxc.hlsl
index 1dbabc6..8ffd661 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_f3f889() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(2.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.glsl
index dffe515..ae674d5 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_f3f889() {
-  float16_t res = 0.0hf;
+  float16_t res = 2.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ceil_f3f889() {
-  float16_t res = 0.0hf;
+  float16_t res = 2.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_f3f889() {
-  float16_t res = 0.0hf;
+  float16_t res = 2.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.msl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.msl
index 214d570..4f3948a 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_f3f889() {
-  half res = 0.0h;
+  half res = 2.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.spvasm
index 2f13171..dda4872 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_1 = OpConstant %half 0x1p+1
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_f3f889 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %ceil_f3f889
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %ceil_f3f889
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %ceil_f3f889
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %ceil_f3f889
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %ceil_f3f889
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %ceil_f3f889
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.wgsl
index 288d3c2..300bb86 100644
--- a/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ceil/f3f889.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_f3f889() {
-  var res : f16 = ceil(f16());
+  var res : f16 = ceil(1.5h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl
index fcb634e..59e9629 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl
@@ -25,7 +25,7 @@
 
 // fn clamp(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn clamp_235b29() {
-  var res: vec2<f16> = clamp(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = clamp(vec2<f16>(1.h), vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.dxc.hlsl
index 02fc882..689753d 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_235b29() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.glsl
index 3a90e73..5ca5bcc 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_235b29() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void clamp_235b29() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_235b29() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.msl
index cd5723f..e16b9e7 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_235b29() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.spvasm
index 70a6d49..6bc8564 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_235b29 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %clamp_235b29
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_235b29
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_235b29
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_235b29
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_235b29
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_235b29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.wgsl
index ba5303c..9f3cf42 100644
--- a/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/235b29.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn clamp_235b29() {
-  var res : vec2<f16> = clamp(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = clamp(vec2<f16>(1.0h), vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl
index 9c5f382..d46e307 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl
@@ -25,7 +25,7 @@
 
 // fn clamp(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn clamp_2c251b() {
-  var res: vec4<f16> = clamp(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = clamp(vec4<f16>(1.h), vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.dxc.hlsl
index 79e81c9..e790a46 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_2c251b() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.glsl
index e1cfbbe..3044fef 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_2c251b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void clamp_2c251b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_2c251b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.msl
index 5168d3d..a3a99b3 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_2c251b() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.spvasm
index 8c74f7d..c179c90 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_2c251b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %clamp_2c251b
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_2c251b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_2c251b
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_2c251b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_2c251b
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_2c251b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.wgsl
index 15be6c8..b7e50a0 100644
--- a/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/2c251b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn clamp_2c251b() {
-  var res : vec4<f16> = clamp(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = clamp(vec4<f16>(1.0h), vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl
index b6f3eb9..62e2d98 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl
@@ -25,7 +25,7 @@
 
 // fn clamp(f16, f16, f16) -> f16
 fn clamp_553ffb() {
-  var res: f16 = clamp(f16(), f16(), f16());
+  var res: f16 = clamp(1.h, 1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.dxc.hlsl
index 0343bfd..13664d0 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_553ffb() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.glsl
index 060c13f3..58b0e15 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_553ffb() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void clamp_553ffb() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_553ffb() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.msl
index 34e8f69..72b5e78 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_553ffb() {
-  half res = 0.0h;
+  half res = 1.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.spvasm
index c4abe0d..e36bfdb 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_553ffb = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_0
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %clamp_553ffb
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %clamp_553ffb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %clamp_553ffb
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_553ffb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_553ffb
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_553ffb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.wgsl
index 48f3ab3..51e5047 100644
--- a/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/553ffb.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn clamp_553ffb() {
-  var res : f16 = clamp(f16(), f16(), f16());
+  var res : f16 = clamp(1.0h, 1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl
index f03c28a..10e7a35 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl
@@ -25,7 +25,7 @@
 
 // fn clamp(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn clamp_b195eb() {
-  var res: vec3<f16> = clamp(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = clamp(vec3<f16>(1.h), vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.dxc.hlsl
index c94442f..251c215 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_b195eb() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.glsl
index 500588f..887817b 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_b195eb() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void clamp_b195eb() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_b195eb() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.msl
index 58d111a..0570ea1 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_b195eb() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.spvasm
index 4beb74d..066e6d4 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_b195eb = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %clamp_b195eb
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_b195eb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_b195eb
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_b195eb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_b195eb
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_b195eb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.wgsl
index bd88ab4..dc537e0 100644
--- a/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/b195eb.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn clamp_b195eb() {
-  var res : vec3<f16> = clamp(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = clamp(vec3<f16>(1.0h), vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl
index 07bd888..658ff3f 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(vec<3, f16>) -> vec<3, f16>
 fn cos_0835a8() {
-  var res: vec3<f16> = cos(vec3<f16>(f16()));
+  var res: vec3<f16> = cos(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.dxc.hlsl
index ef1328a..41ab048 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_0835a8() {
-  vector<float16_t, 3> res = cos((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = cos((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.glsl
index f8f69c4..50495bb 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0835a8() {
-  f16vec3 res = cos(f16vec3(0.0hf));
+  f16vec3 res = cos(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cos_0835a8() {
-  f16vec3 res = cos(f16vec3(0.0hf));
+  f16vec3 res = cos(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0835a8() {
-  f16vec3 res = cos(f16vec3(0.0hf));
+  f16vec3 res = cos(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.msl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.msl
index 790a32d..3f5c8a1 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_0835a8() {
-  half3 res = cos(half3(0.0h));
+  half3 res = cos(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.spvasm
index d151e5c..1ea6d26 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_0835a8 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Cos %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Cos %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %cos_0835a8
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cos_0835a8
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %cos_0835a8
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cos_0835a8
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %cos_0835a8
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cos_0835a8
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.wgsl
index 94f028a..6ef5216 100644
--- a/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cos/0835a8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_0835a8() {
-  var res : vec3<f16> = cos(vec3<f16>(f16()));
+  var res : vec3<f16> = cos(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl
index 6bcbb87..661ceb1 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(vec<4, f16>) -> vec<4, f16>
 fn cos_0a89f7() {
-  var res: vec4<f16> = cos(vec4<f16>(f16()));
+  var res: vec4<f16> = cos(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.dxc.hlsl
index 2a00fd0..65a7dc4 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_0a89f7() {
-  vector<float16_t, 4> res = cos((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = cos((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.glsl
index 9daaaff..acc0222 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0a89f7() {
-  f16vec4 res = cos(f16vec4(0.0hf));
+  f16vec4 res = cos(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cos_0a89f7() {
-  f16vec4 res = cos(f16vec4(0.0hf));
+  f16vec4 res = cos(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0a89f7() {
-  f16vec4 res = cos(f16vec4(0.0hf));
+  f16vec4 res = cos(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.msl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.msl
index fe465ac..d8c7d24 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_0a89f7() {
-  half4 res = cos(half4(0.0h));
+  half4 res = cos(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.spvasm
index 5f96623..0f37534 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_0a89f7 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Cos %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Cos %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %cos_0a89f7
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cos_0a89f7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %cos_0a89f7
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cos_0a89f7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %cos_0a89f7
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cos_0a89f7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.wgsl
index 536f85f..2617a7f 100644
--- a/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cos/0a89f7.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_0a89f7() {
-  var res : vec4<f16> = cos(vec4<f16>(f16()));
+  var res : vec4<f16> = cos(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl
index c233d3c..5bb51fa 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(vec<2, f16>) -> vec<2, f16>
 fn cos_5bc2c6() {
-  var res: vec2<f16> = cos(vec2<f16>(f16()));
+  var res: vec2<f16> = cos(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.dxc.hlsl
index a27a229..2bf3bea 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_5bc2c6() {
-  vector<float16_t, 2> res = cos((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = cos((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.glsl
index 6da1c94..e0f5f47 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_5bc2c6() {
-  f16vec2 res = cos(f16vec2(0.0hf));
+  f16vec2 res = cos(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cos_5bc2c6() {
-  f16vec2 res = cos(f16vec2(0.0hf));
+  f16vec2 res = cos(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_5bc2c6() {
-  f16vec2 res = cos(f16vec2(0.0hf));
+  f16vec2 res = cos(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.msl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.msl
index 91434e1..96d7029 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_5bc2c6() {
-  half2 res = cos(half2(0.0h));
+  half2 res = cos(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.spvasm
index 278c3e1..3ad7b96 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_5bc2c6 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Cos %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Cos %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %cos_5bc2c6
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cos_5bc2c6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %cos_5bc2c6
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cos_5bc2c6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %cos_5bc2c6
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cos_5bc2c6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.wgsl
index 2010e95..fc78f88 100644
--- a/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cos/5bc2c6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_5bc2c6() {
-  var res : vec2<f16> = cos(vec2<f16>(f16()));
+  var res : vec2<f16> = cos(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl
index 630e2fd..d1adddb 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(f16) -> f16
 fn cos_fc047d() {
-  var res: f16 = cos(f16());
+  var res: f16 = cos(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.dxc.hlsl
index f240327..7064a16 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_fc047d() {
-  float16_t res = cos(float16_t(0.0h));
+  float16_t res = cos(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.glsl
index 01af81d..83be5ac 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_fc047d() {
-  float16_t res = cos(0.0hf);
+  float16_t res = cos(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cos_fc047d() {
-  float16_t res = cos(0.0hf);
+  float16_t res = cos(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_fc047d() {
-  float16_t res = cos(0.0hf);
+  float16_t res = cos(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.msl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.msl
index e38b8e9..e2a8560 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_fc047d() {
-  half res = cos(0.0h);
+  half res = cos(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.spvasm
index d4c73fe..7ddb415 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_fc047d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Cos %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Cos %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %cos_fc047d
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %cos_fc047d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %cos_fc047d
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %cos_fc047d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cos_fc047d
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %cos_fc047d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.wgsl
index 5671f4c..390ba27 100644
--- a/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cos/fc047d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_fc047d() {
-  var res : f16 = cos(f16());
+  var res : f16 = cos(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl
index a8fcdf8..661f836 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(f16) -> f16
 fn cosh_2ed778() {
-  var res: f16 = cosh(f16());
+  var res: f16 = cosh(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.dxc.hlsl
index f032f20..7ad4887 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_2ed778() {
-  float16_t res = cosh(float16_t(0.0h));
+  float16_t res = cosh(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.glsl
index 798c9bc..976d952 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_2ed778() {
-  float16_t res = cosh(0.0hf);
+  float16_t res = cosh(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cosh_2ed778() {
-  float16_t res = cosh(0.0hf);
+  float16_t res = cosh(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_2ed778() {
-  float16_t res = cosh(0.0hf);
+  float16_t res = cosh(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.msl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.msl
index 5fa15c3..32e7d12 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_2ed778() {
-  half res = cosh(0.0h);
+  half res = cosh(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.spvasm
index bba06a4..1495e9f 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_2ed778 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Cosh %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Cosh %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %cosh_2ed778
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %cosh_2ed778
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %cosh_2ed778
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %cosh_2ed778
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cosh_2ed778
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %cosh_2ed778
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.wgsl
index 00b8f27..c710cf7 100644
--- a/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/2ed778.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_2ed778() {
-  var res : f16 = cosh(f16());
+  var res : f16 = cosh(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl
index d1e959a..d42f4b2 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(vec<4, f16>) -> vec<4, f16>
 fn cosh_3b7bbf() {
-  var res: vec4<f16> = cosh(vec4<f16>(f16()));
+  var res: vec4<f16> = cosh(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.dxc.hlsl
index ede2f1a..384a1ed 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_3b7bbf() {
-  vector<float16_t, 4> res = cosh((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = cosh((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.glsl
index 73e0dc9..d3f5e3f 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_3b7bbf() {
-  f16vec4 res = cosh(f16vec4(0.0hf));
+  f16vec4 res = cosh(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cosh_3b7bbf() {
-  f16vec4 res = cosh(f16vec4(0.0hf));
+  f16vec4 res = cosh(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_3b7bbf() {
-  f16vec4 res = cosh(f16vec4(0.0hf));
+  f16vec4 res = cosh(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.msl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.msl
index c0d6580..84b1af2 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_3b7bbf() {
-  half4 res = cosh(half4(0.0h));
+  half4 res = cosh(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.spvasm
index da245fd..fce9ada 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_3b7bbf = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Cosh %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Cosh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %cosh_3b7bbf
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cosh_3b7bbf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %cosh_3b7bbf
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cosh_3b7bbf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %cosh_3b7bbf
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cosh_3b7bbf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.wgsl
index 09eaede..37fbc91 100644
--- a/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/3b7bbf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_3b7bbf() {
-  var res : vec4<f16> = cosh(vec4<f16>(f16()));
+  var res : vec4<f16> = cosh(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl
index a3d5505..059f9f1 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(vec<2, f16>) -> vec<2, f16>
 fn cosh_43b672() {
-  var res: vec2<f16> = cosh(vec2<f16>(f16()));
+  var res: vec2<f16> = cosh(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.dxc.hlsl
index 8b54430..6034f72 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_43b672() {
-  vector<float16_t, 2> res = cosh((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = cosh((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.glsl
index 8b04b98..ef9046b 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_43b672() {
-  f16vec2 res = cosh(f16vec2(0.0hf));
+  f16vec2 res = cosh(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cosh_43b672() {
-  f16vec2 res = cosh(f16vec2(0.0hf));
+  f16vec2 res = cosh(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_43b672() {
-  f16vec2 res = cosh(f16vec2(0.0hf));
+  f16vec2 res = cosh(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.msl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.msl
index 697c079..9c17ff6 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_43b672() {
-  half2 res = cosh(half2(0.0h));
+  half2 res = cosh(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.spvasm
index 76983ac..2fda139 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_43b672 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Cosh %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Cosh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %cosh_43b672
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cosh_43b672
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %cosh_43b672
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cosh_43b672
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %cosh_43b672
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cosh_43b672
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.wgsl
index 6646f2d..6b59019 100644
--- a/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/43b672.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_43b672() {
-  var res : vec2<f16> = cosh(vec2<f16>(f16()));
+  var res : vec2<f16> = cosh(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl
index 99a4004..69df244 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(vec<3, f16>) -> vec<3, f16>
 fn cosh_b1b8a0() {
-  var res: vec3<f16> = cosh(vec3<f16>(f16()));
+  var res: vec3<f16> = cosh(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.dxc.hlsl
index 5be4cfe..718e0ea 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_b1b8a0() {
-  vector<float16_t, 3> res = cosh((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = cosh((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.glsl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.glsl
index 995b0d7..9b5a615 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_b1b8a0() {
-  f16vec3 res = cosh(f16vec3(0.0hf));
+  f16vec3 res = cosh(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void cosh_b1b8a0() {
-  f16vec3 res = cosh(f16vec3(0.0hf));
+  f16vec3 res = cosh(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_b1b8a0() {
-  f16vec3 res = cosh(f16vec3(0.0hf));
+  f16vec3 res = cosh(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.msl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.msl
index b426dbb..0bf6143 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_b1b8a0() {
-  half3 res = cosh(half3(0.0h));
+  half3 res = cosh(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.spvasm
index 9a5a566..e3491c5 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_b1b8a0 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Cosh %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Cosh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %cosh_b1b8a0
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cosh_b1b8a0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %cosh_b1b8a0
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cosh_b1b8a0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %cosh_b1b8a0
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cosh_b1b8a0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.wgsl
index bf06df5..d814107 100644
--- a/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cosh/b1b8a0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_b1b8a0() {
-  var res : vec3<f16> = cosh(vec3<f16>(f16()));
+  var res : vec3<f16> = cosh(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cross/9857cb.wgsl b/test/tint/builtins/gen/literal/cross/9857cb.wgsl
index aaae266..fffed92 100644
--- a/test/tint/builtins/gen/literal/cross/9857cb.wgsl
+++ b/test/tint/builtins/gen/literal/cross/9857cb.wgsl
@@ -25,7 +25,7 @@
 
 // fn cross(vec3<f16>, vec3<f16>) -> vec3<f16>
 fn cross_9857cb() {
-  var res: vec3<f16> = cross(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = cross(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.wgsl
index f991031..04296c9 100644
--- a/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/cross/9857cb.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cross_9857cb() {
-  var res : vec3<f16> = cross(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = cross(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl
index f749565..1a55b08 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(vec<4, f16>) -> vec<4, f16>
 fn degrees_3055d3() {
-  var res: vec4<f16> = degrees(vec4<f16>(f16()));
+  var res: vec4<f16> = degrees(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.dxc.hlsl
index 196bdf5..ff572fd 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_3055d3() {
-  vector<float16_t, 4> res = tint_degrees((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = tint_degrees((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.glsl
index a9e5f5d..b9788e1 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_3055d3() {
-  f16vec4 res = tint_degrees(f16vec4(0.0hf));
+  f16vec4 res = tint_degrees(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void degrees_3055d3() {
-  f16vec4 res = tint_degrees(f16vec4(0.0hf));
+  f16vec4 res = tint_degrees(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void degrees_3055d3() {
-  f16vec4 res = tint_degrees(f16vec4(0.0hf));
+  f16vec4 res = tint_degrees(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.msl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.msl
index 2075cbd..e9fe3c7 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_3055d3() {
-  half4 res = tint_degrees(half4(0.0h));
+  half4 res = tint_degrees(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.spvasm
index 2d68e4e..171e19c 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_3055d3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Degrees %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Degrees %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %degrees_3055d3
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %degrees_3055d3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %degrees_3055d3
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %degrees_3055d3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %degrees_3055d3
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %degrees_3055d3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.wgsl
index 58d6ef5..e58a8a0 100644
--- a/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/3055d3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_3055d3() {
-  var res : vec4<f16> = degrees(vec4<f16>(f16()));
+  var res : vec4<f16> = degrees(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl
index cdd9a50..e1e9537 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(f16) -> f16
 fn degrees_5e9805() {
-  var res: f16 = degrees(f16());
+  var res: f16 = degrees(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.dxc.hlsl
index 209c5b4..930472f 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_5e9805() {
-  float16_t res = tint_degrees(float16_t(0.0h));
+  float16_t res = tint_degrees(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.glsl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.glsl
index 1a87241..3042f4c 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_5e9805() {
-  float16_t res = tint_degrees(0.0hf);
+  float16_t res = tint_degrees(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void degrees_5e9805() {
-  float16_t res = tint_degrees(0.0hf);
+  float16_t res = tint_degrees(1.0hf);
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void degrees_5e9805() {
-  float16_t res = tint_degrees(0.0hf);
+  float16_t res = tint_degrees(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.msl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.msl
index 1aacda2..280c0bc 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_5e9805() {
-  half res = tint_degrees(0.0h);
+  half res = tint_degrees(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.spvasm
index 028d4a8..9a33ca6 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_5e9805 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Degrees %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Degrees %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %degrees_5e9805
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %degrees_5e9805
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %degrees_5e9805
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %degrees_5e9805
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %degrees_5e9805
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %degrees_5e9805
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.wgsl
index 647c580..4056d0b 100644
--- a/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/5e9805.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_5e9805() {
-  var res : f16 = degrees(f16());
+  var res : f16 = degrees(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl
index c30a280..6ab63b2 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(vec<3, f16>) -> vec<3, f16>
 fn degrees_dfe8f4() {
-  var res: vec3<f16> = degrees(vec3<f16>(f16()));
+  var res: vec3<f16> = degrees(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.dxc.hlsl
index 0dd63bf..b54ef76 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_dfe8f4() {
-  vector<float16_t, 3> res = tint_degrees((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = tint_degrees((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.glsl
index 59962ab..576497a 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_dfe8f4() {
-  f16vec3 res = tint_degrees(f16vec3(0.0hf));
+  f16vec3 res = tint_degrees(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void degrees_dfe8f4() {
-  f16vec3 res = tint_degrees(f16vec3(0.0hf));
+  f16vec3 res = tint_degrees(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void degrees_dfe8f4() {
-  f16vec3 res = tint_degrees(f16vec3(0.0hf));
+  f16vec3 res = tint_degrees(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.msl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.msl
index f6ef443..419df21 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_dfe8f4() {
-  half3 res = tint_degrees(half3(0.0h));
+  half3 res = tint_degrees(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.spvasm
index fb059e8..ca76456 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_dfe8f4 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Degrees %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Degrees %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %degrees_dfe8f4
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %degrees_dfe8f4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %degrees_dfe8f4
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %degrees_dfe8f4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %degrees_dfe8f4
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %degrees_dfe8f4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.wgsl
index 3d2cd7a..885b2b9 100644
--- a/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/dfe8f4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_dfe8f4() {
-  var res : vec3<f16> = degrees(vec3<f16>(f16()));
+  var res : vec3<f16> = degrees(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl
index 7cfc4a2..4c5bb05 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(vec<2, f16>) -> vec<2, f16>
 fn degrees_f59715() {
-  var res: vec2<f16> = degrees(vec2<f16>(f16()));
+  var res: vec2<f16> = degrees(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.dxc.hlsl
index 8aac00f..68de11a 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_f59715() {
-  vector<float16_t, 2> res = tint_degrees((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = tint_degrees((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.glsl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.glsl
index 99ed077..7a7c686 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_f59715() {
-  f16vec2 res = tint_degrees(f16vec2(0.0hf));
+  f16vec2 res = tint_degrees(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void degrees_f59715() {
-  f16vec2 res = tint_degrees(f16vec2(0.0hf));
+  f16vec2 res = tint_degrees(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void degrees_f59715() {
-  f16vec2 res = tint_degrees(f16vec2(0.0hf));
+  f16vec2 res = tint_degrees(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.msl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.msl
index 2c09325..af8aa30 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_f59715() {
-  half2 res = tint_degrees(half2(0.0h));
+  half2 res = tint_degrees(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.spvasm
index d9b7fb5..ca83372 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_f59715 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Degrees %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Degrees %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %degrees_f59715
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %degrees_f59715
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %degrees_f59715
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %degrees_f59715
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %degrees_f59715
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %degrees_f59715
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.wgsl
index b3b6057..0971312 100644
--- a/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/degrees/f59715.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_f59715() {
-  var res : vec2<f16> = degrees(vec2<f16>(f16()));
+  var res : vec2<f16> = degrees(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl
index 9ff80ce..0add05e 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl
@@ -25,7 +25,7 @@
 
 // fn determinant(mat<4, 4, f16>) -> f16
 fn determinant_32bfde() {
-  var res: f16 = determinant(mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: f16 = determinant(mat4x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.dxc.hlsl
index 123af60..bae350d 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void determinant_32bfde() {
-  float16_t res = determinant(matrix<float16_t, 4, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx));
+  float16_t res = determinant(matrix<float16_t, 4, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.glsl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.glsl
index 32fc171..f94a854 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_32bfde() {
-  float16_t res = determinant(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  float16_t res = determinant(f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void determinant_32bfde() {
-  float16_t res = determinant(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  float16_t res = determinant(f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_32bfde() {
-  float16_t res = determinant(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  float16_t res = determinant(f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.msl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.msl
index 0f0a75d..f416fbf 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void determinant_32bfde() {
-  half res = determinant(half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h)));
+  half res = determinant(half4x4(half4(1.0h), half4(1.0h), half4(1.0h), half4(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.spvasm
index c3e9627..ffe5e4d 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,37 +38,39 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
  %mat4v4half = OpTypeMatrix %v4half 4
-         %18 = OpConstantNull %mat4v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %19 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %20 = OpConstantComposite %mat4v4half %19 %19 %19 %19
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %determinant_32bfde = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %21
-         %13 = OpExtInst %half %15 Determinant %18
+        %res = OpVariable %_ptr_Function_half Function %23
+         %13 = OpExtInst %half %15 Determinant %20
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %determinant_32bfde
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %determinant_32bfde
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %determinant_32bfde
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %determinant_32bfde
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %determinant_32bfde
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %determinant_32bfde
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.wgsl
index 5d3cce9..237cc23 100644
--- a/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/determinant/32bfde.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn determinant_32bfde() {
-  var res : f16 = determinant(mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : f16 = determinant(mat4x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl
index bb81d5b..5154ef7 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl
@@ -25,7 +25,7 @@
 
 // fn determinant(mat<3, 3, f16>) -> f16
 fn determinant_d7c86f() {
-  var res: f16 = determinant(mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: f16 = determinant(mat3x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.dxc.hlsl
index 4971b2e..083d524 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void determinant_d7c86f() {
-  float16_t res = determinant(matrix<float16_t, 3, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx));
+  float16_t res = determinant(matrix<float16_t, 3, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.glsl
index 13f877c..064604c 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_d7c86f() {
-  float16_t res = determinant(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  float16_t res = determinant(f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void determinant_d7c86f() {
-  float16_t res = determinant(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  float16_t res = determinant(f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_d7c86f() {
-  float16_t res = determinant(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  float16_t res = determinant(f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.msl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.msl
index cfb43b5..17c01fb 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void determinant_d7c86f() {
-  half res = determinant(half3x3(half3(0.0h), half3(0.0h), half3(0.0h)));
+  half res = determinant(half3x3(half3(1.0h), half3(1.0h), half3(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.spvasm
index e3ed5cc..c4cb0a3 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,37 +38,39 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
  %mat3v3half = OpTypeMatrix %v3half 3
-         %18 = OpConstantNull %mat3v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %19 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %20 = OpConstantComposite %mat3v3half %19 %19 %19
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %determinant_d7c86f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %21
-         %13 = OpExtInst %half %15 Determinant %18
+        %res = OpVariable %_ptr_Function_half Function %23
+         %13 = OpExtInst %half %15 Determinant %20
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %determinant_d7c86f
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %determinant_d7c86f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %determinant_d7c86f
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %determinant_d7c86f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %determinant_d7c86f
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %determinant_d7c86f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.wgsl
index 2623778..d578f32 100644
--- a/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/determinant/d7c86f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn determinant_d7c86f() {
-  var res : f16 = determinant(mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : f16 = determinant(mat3x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl
index 2b22f37..2741b6d 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl
@@ -25,7 +25,7 @@
 
 // fn determinant(mat<2, 2, f16>) -> f16
 fn determinant_fc12a5() {
-  var res: f16 = determinant(mat2x2<f16>(f16(), f16(), f16(), f16()));
+  var res: f16 = determinant(mat2x2<f16>(1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.dxc.hlsl
index f1f2a23..698a14c 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void determinant_fc12a5() {
-  float16_t res = determinant(matrix<float16_t, 2, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx));
+  float16_t res = determinant(matrix<float16_t, 2, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.glsl
index 5239eec..b647997 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_fc12a5() {
-  float16_t res = determinant(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)));
+  float16_t res = determinant(f16mat2(f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void determinant_fc12a5() {
-  float16_t res = determinant(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)));
+  float16_t res = determinant(f16mat2(f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_fc12a5() {
-  float16_t res = determinant(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)));
+  float16_t res = determinant(f16mat2(f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.msl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.msl
index ef6ccaf..a639c13 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void determinant_fc12a5() {
-  half res = determinant(half2x2(half2(0.0h), half2(0.0h)));
+  half res = determinant(half2x2(half2(1.0h), half2(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.spvasm
index 7725163..2854245 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,37 +38,39 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
  %mat2v2half = OpTypeMatrix %v2half 2
-         %18 = OpConstantNull %mat2v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %19 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %20 = OpConstantComposite %mat2v2half %19 %19
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %determinant_fc12a5 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %21
-         %13 = OpExtInst %half %15 Determinant %18
+        %res = OpVariable %_ptr_Function_half Function %23
+         %13 = OpExtInst %half %15 Determinant %20
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %determinant_fc12a5
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %determinant_fc12a5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %determinant_fc12a5
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %determinant_fc12a5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %determinant_fc12a5
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %determinant_fc12a5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.wgsl
index 0a10d8e..2a13c30 100644
--- a/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/determinant/fc12a5.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn determinant_fc12a5() {
-  var res : f16 = determinant(mat2x2<f16>(f16(), f16(), f16(), f16()));
+  var res : f16 = determinant(mat2x2<f16>(1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl
index 1752332..78785ef 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl
@@ -25,7 +25,7 @@
 
 // fn distance(vec<4, f16>, vec<4, f16>) -> f16
 fn distance_7272f3() {
-  var res: f16 = distance(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: f16 = distance(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.dxc.hlsl
index 4e34e08..43150f3 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void distance_7272f3() {
-  float16_t res = distance((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  float16_t res = distance((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.glsl
index 3ecf59a..def5558 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7272f3() {
-  float16_t res = distance(f16vec4(0.0hf), f16vec4(0.0hf));
+  float16_t res = distance(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void distance_7272f3() {
-  float16_t res = distance(f16vec4(0.0hf), f16vec4(0.0hf));
+  float16_t res = distance(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7272f3() {
-  float16_t res = distance(f16vec4(0.0hf), f16vec4(0.0hf));
+  float16_t res = distance(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.msl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.msl
index 87c9be8..881f168 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void distance_7272f3() {
-  half res = distance(half4(0.0h), half4(0.0h));
+  half res = distance(half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.spvasm
index 491038e..508e80c 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %20 = OpConstantNull %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_7272f3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %20
-         %13 = OpExtInst %half %15 Distance %17 %17
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Distance %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %distance_7272f3
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %distance_7272f3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %distance_7272f3
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %distance_7272f3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %distance_7272f3
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %distance_7272f3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.wgsl
index 5472c32..22004c9 100644
--- a/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/distance/7272f3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn distance_7272f3() {
-  var res : f16 = distance(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : f16 = distance(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl
index a03bad7..4a27b52 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl
@@ -25,7 +25,7 @@
 
 // fn distance(f16, f16) -> f16
 fn distance_7d201f() {
-  var res: f16 = distance(f16(), f16());
+  var res: f16 = distance(1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.dxc.hlsl
index 10efc6d..d8b616f 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void distance_7d201f() {
-  float16_t res = distance(float16_t(0.0h), float16_t(0.0h));
+  float16_t res = distance(float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.glsl
index 30aee9f..00663ec 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7d201f() {
-  float16_t res = distance(0.0hf, 0.0hf);
+  float16_t res = distance(1.0hf, 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void distance_7d201f() {
-  float16_t res = distance(0.0hf, 0.0hf);
+  float16_t res = distance(1.0hf, 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7d201f() {
-  float16_t res = distance(0.0hf, 0.0hf);
+  float16_t res = distance(1.0hf, 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.msl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.msl
index e7baa97..fc5149e 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void distance_7d201f() {
-  half res = fabs(0.0h - 0.0h);
+  half res = fabs(1.0h - 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.spvasm
index 8a0a548..e5a3ac2 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_7d201f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Distance %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Distance %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %distance_7d201f
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %distance_7d201f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %distance_7d201f
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %distance_7d201f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %distance_7d201f
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %distance_7d201f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.wgsl
index 8de3851..c664ae0 100644
--- a/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/distance/7d201f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn distance_7d201f() {
-  var res : f16 = distance(f16(), f16());
+  var res : f16 = distance(1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl
index affa3a3..502dfaa 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl
@@ -25,7 +25,7 @@
 
 // fn distance(vec<2, f16>, vec<2, f16>) -> f16
 fn distance_892a5d() {
-  var res: f16 = distance(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: f16 = distance(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.dxc.hlsl
index d35b147..ade1134 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void distance_892a5d() {
-  float16_t res = distance((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  float16_t res = distance((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.glsl
index 6c6b752..903ffc5 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_892a5d() {
-  float16_t res = distance(f16vec2(0.0hf), f16vec2(0.0hf));
+  float16_t res = distance(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void distance_892a5d() {
-  float16_t res = distance(f16vec2(0.0hf), f16vec2(0.0hf));
+  float16_t res = distance(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_892a5d() {
-  float16_t res = distance(f16vec2(0.0hf), f16vec2(0.0hf));
+  float16_t res = distance(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.msl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.msl
index 8977f67..627969b 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void distance_892a5d() {
-  half res = distance(half2(0.0h), half2(0.0h));
+  half res = distance(half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.spvasm
index 8f00450..4ddc326 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %20 = OpConstantNull %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_892a5d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %20
-         %13 = OpExtInst %half %15 Distance %17 %17
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Distance %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %distance_892a5d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %distance_892a5d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %distance_892a5d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %distance_892a5d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %distance_892a5d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %distance_892a5d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.wgsl
index 71ed2d0..53390b3 100644
--- a/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/distance/892a5d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn distance_892a5d() {
-  var res : f16 = distance(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : f16 = distance(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl
index 80353c8..5d5a2d2 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl
@@ -25,7 +25,7 @@
 
 // fn distance(vec<3, f16>, vec<3, f16>) -> f16
 fn distance_928fa0() {
-  var res: f16 = distance(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: f16 = distance(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.dxc.hlsl
index c21d144..852e284 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void distance_928fa0() {
-  float16_t res = distance((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  float16_t res = distance((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.glsl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.glsl
index c68cb10..30f8cf3 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_928fa0() {
-  float16_t res = distance(f16vec3(0.0hf), f16vec3(0.0hf));
+  float16_t res = distance(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void distance_928fa0() {
-  float16_t res = distance(f16vec3(0.0hf), f16vec3(0.0hf));
+  float16_t res = distance(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_928fa0() {
-  float16_t res = distance(f16vec3(0.0hf), f16vec3(0.0hf));
+  float16_t res = distance(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.msl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.msl
index 0e034ab..9c928e6 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void distance_928fa0() {
-  half res = distance(half3(0.0h), half3(0.0h));
+  half res = distance(half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.spvasm
index 63605ca..d272d09 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %20 = OpConstantNull %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_928fa0 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %20
-         %13 = OpExtInst %half %15 Distance %17 %17
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Distance %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %distance_928fa0
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %distance_928fa0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %distance_928fa0
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %distance_928fa0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %distance_928fa0
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %distance_928fa0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.wgsl
index 81c6451..3a283dd 100644
--- a/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/distance/928fa0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn distance_928fa0() {
-  var res : f16 = distance(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : f16 = distance(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl
index 84f71c0..52cd299 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl
@@ -25,7 +25,7 @@
 
 // fn dot(vec<3, f16>, vec<3, f16>) -> f16
 fn dot_8e40f1() {
-  var res: f16 = dot(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: f16 = dot(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.dxc.hlsl
index 6e108ce..45e55de 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void dot_8e40f1() {
-  float16_t res = dot((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  float16_t res = dot((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.glsl
index 4342194..069a38d 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_8e40f1() {
-  float16_t res = dot(f16vec3(0.0hf), f16vec3(0.0hf));
+  float16_t res = dot(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void dot_8e40f1() {
-  float16_t res = dot(f16vec3(0.0hf), f16vec3(0.0hf));
+  float16_t res = dot(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_8e40f1() {
-  float16_t res = dot(f16vec3(0.0hf), f16vec3(0.0hf));
+  float16_t res = dot(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.msl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.msl
index 1c34dc5..9299636 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dot_8e40f1() {
-  half res = dot(half3(0.0h), half3(0.0h));
+  half res = dot(half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.spvasm
index 7fc21ec..005fa5a 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,37 +36,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %16 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpConstantNull %half
-         %20 = OpTypeFunction %v4float
+         %20 = OpConstantNull %half
+         %21 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %dot_8e40f1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %19
-         %13 = OpDot %half %16 %16
+        %res = OpVariable %_ptr_Function_half Function %20
+         %13 = OpDot %half %17 %17
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %dot_8e40f1
+%vertex_main_inner = OpFunction %v4float None %21
+         %23 = OpLabel
+         %24 = OpFunctionCall %void %dot_8e40f1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %26 = OpLabel
+         %27 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %27
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %dot_8e40f1
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %dot_8e40f1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %dot_8e40f1
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %dot_8e40f1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.wgsl
index 5b8c1a6..609ecd0 100644
--- a/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/dot/8e40f1.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn dot_8e40f1() {
-  var res : f16 = dot(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : f16 = dot(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl
index e300f31..0846182 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl
@@ -25,7 +25,7 @@
 
 // fn dot(vec<2, f16>, vec<2, f16>) -> f16
 fn dot_cd5a04() {
-  var res: f16 = dot(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: f16 = dot(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.dxc.hlsl
index 04adad0..75f9749 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void dot_cd5a04() {
-  float16_t res = dot((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  float16_t res = dot((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.glsl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.glsl
index c14d0ae..e49873a 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_cd5a04() {
-  float16_t res = dot(f16vec2(0.0hf), f16vec2(0.0hf));
+  float16_t res = dot(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void dot_cd5a04() {
-  float16_t res = dot(f16vec2(0.0hf), f16vec2(0.0hf));
+  float16_t res = dot(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_cd5a04() {
-  float16_t res = dot(f16vec2(0.0hf), f16vec2(0.0hf));
+  float16_t res = dot(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.msl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.msl
index 243b15a..01e7562 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dot_cd5a04() {
-  half res = dot(half2(0.0h), half2(0.0h));
+  half res = dot(half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.spvasm
index 7fbae98..0d140a4 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,37 +36,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %16 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpConstantNull %half
-         %20 = OpTypeFunction %v4float
+         %20 = OpConstantNull %half
+         %21 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %dot_cd5a04 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %19
-         %13 = OpDot %half %16 %16
+        %res = OpVariable %_ptr_Function_half Function %20
+         %13 = OpDot %half %17 %17
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %dot_cd5a04
+%vertex_main_inner = OpFunction %v4float None %21
+         %23 = OpLabel
+         %24 = OpFunctionCall %void %dot_cd5a04
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %26 = OpLabel
+         %27 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %27
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %dot_cd5a04
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %dot_cd5a04
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %dot_cd5a04
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %dot_cd5a04
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.wgsl
index 25778c7..3547523 100644
--- a/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/dot/cd5a04.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn dot_cd5a04() {
-  var res : f16 = dot(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : f16 = dot(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl
index 39d1e51..2b47d38 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl
@@ -25,7 +25,7 @@
 
 // fn dot(vec<4, f16>, vec<4, f16>) -> f16
 fn dot_d0d179() {
-  var res: f16 = dot(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: f16 = dot(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.dxc.hlsl
index f05dcec..fd31033 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void dot_d0d179() {
-  float16_t res = dot((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  float16_t res = dot((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.glsl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.glsl
index 90dbe8a..c48a12d 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_d0d179() {
-  float16_t res = dot(f16vec4(0.0hf), f16vec4(0.0hf));
+  float16_t res = dot(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void dot_d0d179() {
-  float16_t res = dot(f16vec4(0.0hf), f16vec4(0.0hf));
+  float16_t res = dot(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_d0d179() {
-  float16_t res = dot(f16vec4(0.0hf), f16vec4(0.0hf));
+  float16_t res = dot(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.msl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.msl
index becad5b..1110c66 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void dot_d0d179() {
-  half res = dot(half4(0.0h), half4(0.0h));
+  half res = dot(half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.spvasm
index 379f023..b465609 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,37 +36,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %16 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpConstantNull %half
-         %20 = OpTypeFunction %v4float
+         %20 = OpConstantNull %half
+         %21 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %dot_d0d179 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %19
-         %13 = OpDot %half %16 %16
+        %res = OpVariable %_ptr_Function_half Function %20
+         %13 = OpDot %half %17 %17
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %dot_d0d179
+%vertex_main_inner = OpFunction %v4float None %21
+         %23 = OpLabel
+         %24 = OpFunctionCall %void %dot_d0d179
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %26 = OpLabel
+         %27 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %27
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %dot_d0d179
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %dot_d0d179
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %dot_d0d179
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %dot_d0d179
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.wgsl
index 7e94f8b..17c0bba 100644
--- a/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/dot/d0d179.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn dot_d0d179() {
-  var res : f16 = dot(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : f16 = dot(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl b/test/tint/builtins/gen/literal/exp/13806d.wgsl
index 04d8cc6..ae8492e 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(vec<3, f16>) -> vec<3, f16>
 fn exp_13806d() {
-  var res: vec3<f16> = exp(vec3<f16>(f16()));
+  var res: vec3<f16> = exp(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.dxc.hlsl
index 6d8ae98..8a2a30a 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_13806d() {
-  vector<float16_t, 3> res = exp((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = exp((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.glsl
index e2a7b73..18dca94 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_13806d() {
-  f16vec3 res = exp(f16vec3(0.0hf));
+  f16vec3 res = exp(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp_13806d() {
-  f16vec3 res = exp(f16vec3(0.0hf));
+  f16vec3 res = exp(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_13806d() {
-  f16vec3 res = exp(f16vec3(0.0hf));
+  f16vec3 res = exp(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.msl
index 1f4af8c..7150692 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_13806d() {
-  half3 res = exp(half3(0.0h));
+  half3 res = exp(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.spvasm
index a3679ff..039b69b 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_13806d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Exp %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Exp %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %exp_13806d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp_13806d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %exp_13806d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp_13806d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %exp_13806d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp_13806d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.wgsl
index 7ccb13f..4e78600 100644
--- a/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp/13806d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_13806d() {
-  var res : vec3<f16> = exp(vec3<f16>(f16()));
+  var res : vec3<f16> = exp(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl
index d2d1bb2..47f5320 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(vec<2, f16>) -> vec<2, f16>
 fn exp_2e08e2() {
-  var res: vec2<f16> = exp(vec2<f16>(f16()));
+  var res: vec2<f16> = exp(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.dxc.hlsl
index 52dca1d..a9d2ab8 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_2e08e2() {
-  vector<float16_t, 2> res = exp((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = exp((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.glsl
index 04a9c64..ead6fec 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_2e08e2() {
-  f16vec2 res = exp(f16vec2(0.0hf));
+  f16vec2 res = exp(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp_2e08e2() {
-  f16vec2 res = exp(f16vec2(0.0hf));
+  f16vec2 res = exp(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_2e08e2() {
-  f16vec2 res = exp(f16vec2(0.0hf));
+  f16vec2 res = exp(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.msl
index fd0c319..5336de7 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_2e08e2() {
-  half2 res = exp(half2(0.0h));
+  half2 res = exp(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.spvasm
index 9d11ae3..25e43eb 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_2e08e2 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Exp %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Exp %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %exp_2e08e2
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp_2e08e2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %exp_2e08e2
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp_2e08e2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %exp_2e08e2
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp_2e08e2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.wgsl
index 9962f0e..31ce159 100644
--- a/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp/2e08e2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_2e08e2() {
-  var res : vec2<f16> = exp(vec2<f16>(f16()));
+  var res : vec2<f16> = exp(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl b/test/tint/builtins/gen/literal/exp/611a87.wgsl
index 53ee480..947bb87 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(vec<4, f16>) -> vec<4, f16>
 fn exp_611a87() {
-  var res: vec4<f16> = exp(vec4<f16>(f16()));
+  var res: vec4<f16> = exp(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.dxc.hlsl
index 47b6a04..4083b4d 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_611a87() {
-  vector<float16_t, 4> res = exp((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = exp((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.glsl
index f5b6a25..f9ec5fb 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_611a87() {
-  f16vec4 res = exp(f16vec4(0.0hf));
+  f16vec4 res = exp(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp_611a87() {
-  f16vec4 res = exp(f16vec4(0.0hf));
+  f16vec4 res = exp(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_611a87() {
-  f16vec4 res = exp(f16vec4(0.0hf));
+  f16vec4 res = exp(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.msl
index 32163a8..72cfc9e 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_611a87() {
-  half4 res = exp(half4(0.0h));
+  half4 res = exp(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.spvasm
index 749740e..2883d1e 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_611a87 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Exp %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Exp %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %exp_611a87
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp_611a87
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %exp_611a87
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp_611a87
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %exp_611a87
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp_611a87
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.wgsl
index 63f247c..3b2b8d9 100644
--- a/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp/611a87.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_611a87() {
-  var res : vec4<f16> = exp(vec4<f16>(f16()));
+  var res : vec4<f16> = exp(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl
index 6572643..d265bf3 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(f16) -> f16
 fn exp_c18fe9() {
-  var res: f16 = exp(f16());
+  var res: f16 = exp(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.dxc.hlsl
index 03ed79f..5d32e2d 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_c18fe9() {
-  float16_t res = exp(float16_t(0.0h));
+  float16_t res = exp(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.glsl
index a937a44..be9113a 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_c18fe9() {
-  float16_t res = exp(0.0hf);
+  float16_t res = exp(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp_c18fe9() {
-  float16_t res = exp(0.0hf);
+  float16_t res = exp(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_c18fe9() {
-  float16_t res = exp(0.0hf);
+  float16_t res = exp(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.msl
index d933e7b..120d379 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_c18fe9() {
-  half res = exp(0.0h);
+  half res = exp(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.spvasm
index 050b62d..fab791b 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_c18fe9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Exp %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Exp %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %exp_c18fe9
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %exp_c18fe9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %exp_c18fe9
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %exp_c18fe9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp_c18fe9
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %exp_c18fe9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.wgsl
index a2dec57..e9ea41f 100644
--- a/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp/c18fe9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_c18fe9() {
-  var res : f16 = exp(f16());
+  var res : f16 = exp(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl
index 104c4bb..1726a87 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(vec<2, f16>) -> vec<2, f16>
 fn exp2_151a4c() {
-  var res: vec2<f16> = exp2(vec2<f16>(f16()));
+  var res: vec2<f16> = exp2(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.dxc.hlsl
index a205613..b86be99 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_151a4c() {
-  vector<float16_t, 2> res = exp2((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = exp2((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.glsl
index 78394dc..e7a27302 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_151a4c() {
-  f16vec2 res = exp2(f16vec2(0.0hf));
+  f16vec2 res = exp2(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp2_151a4c() {
-  f16vec2 res = exp2(f16vec2(0.0hf));
+  f16vec2 res = exp2(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_151a4c() {
-  f16vec2 res = exp2(f16vec2(0.0hf));
+  f16vec2 res = exp2(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.msl
index e8e65ea..648a584 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_151a4c() {
-  half2 res = exp2(half2(0.0h));
+  half2 res = exp2(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.spvasm
index 3b271fa..21a8c06 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_151a4c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Exp2 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Exp2 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %exp2_151a4c
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp2_151a4c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %exp2_151a4c
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp2_151a4c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %exp2_151a4c
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp2_151a4c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.wgsl
index 698ac46..7c28484 100644
--- a/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/151a4c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_151a4c() {
-  var res : vec2<f16> = exp2(vec2<f16>(f16()));
+  var res : vec2<f16> = exp2(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl b/test/tint/builtins/gen/literal/exp2/751377.wgsl
index 790a5b1..dc570f2 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(vec<3, f16>) -> vec<3, f16>
 fn exp2_751377() {
-  var res: vec3<f16> = exp2(vec3<f16>(f16()));
+  var res: vec3<f16> = exp2(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.dxc.hlsl
index 46be625..df31b74 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_751377() {
-  vector<float16_t, 3> res = exp2((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = exp2((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.glsl
index af02e20..92bdff7 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_751377() {
-  f16vec3 res = exp2(f16vec3(0.0hf));
+  f16vec3 res = exp2(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp2_751377() {
-  f16vec3 res = exp2(f16vec3(0.0hf));
+  f16vec3 res = exp2(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_751377() {
-  f16vec3 res = exp2(f16vec3(0.0hf));
+  f16vec3 res = exp2(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.msl
index 201f1e2..94ad2ef 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_751377() {
-  half3 res = exp2(half3(0.0h));
+  half3 res = exp2(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.spvasm
index b255fb1..c9e1e3a 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_751377 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Exp2 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Exp2 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %exp2_751377
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp2_751377
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %exp2_751377
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp2_751377
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %exp2_751377
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp2_751377
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.wgsl
index 5730ea2..effbce1 100644
--- a/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/751377.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_751377() {
-  var res : vec3<f16> = exp2(vec3<f16>(f16()));
+  var res : vec3<f16> = exp2(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl
index 74f45c4..99e021e 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(f16) -> f16
 fn exp2_b408e4() {
-  var res: f16 = exp2(f16());
+  var res: f16 = exp2(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.dxc.hlsl
index 1161b51..b551f3f 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_b408e4() {
-  float16_t res = exp2(float16_t(0.0h));
+  float16_t res = exp2(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.glsl
index 5c041fc..84e9ac1 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_b408e4() {
-  float16_t res = exp2(0.0hf);
+  float16_t res = exp2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp2_b408e4() {
-  float16_t res = exp2(0.0hf);
+  float16_t res = exp2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_b408e4() {
-  float16_t res = exp2(0.0hf);
+  float16_t res = exp2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.msl
index 144f5ad..d28fe02 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_b408e4() {
-  half res = exp2(0.0h);
+  half res = exp2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.spvasm
index 00de130..ce19204 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_b408e4 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Exp2 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Exp2 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %exp2_b408e4
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %exp2_b408e4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %exp2_b408e4
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %exp2_b408e4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp2_b408e4
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %exp2_b408e4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.wgsl
index 65c1649..b1c358e 100644
--- a/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/b408e4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_b408e4() {
-  var res : f16 = exp2(f16());
+  var res : f16 = exp2(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl
index 4bbdb03..654851e 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(vec<4, f16>) -> vec<4, f16>
 fn exp2_ffa827() {
-  var res: vec4<f16> = exp2(vec4<f16>(f16()));
+  var res: vec4<f16> = exp2(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.dxc.hlsl
index 744ae47..1e83141 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_ffa827() {
-  vector<float16_t, 4> res = exp2((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = exp2((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.glsl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.glsl
index 960c753..90847d5 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_ffa827() {
-  f16vec4 res = exp2(f16vec4(0.0hf));
+  f16vec4 res = exp2(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void exp2_ffa827() {
-  f16vec4 res = exp2(f16vec4(0.0hf));
+  f16vec4 res = exp2(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_ffa827() {
-  f16vec4 res = exp2(f16vec4(0.0hf));
+  f16vec4 res = exp2(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.msl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.msl
index add3f5e..46061e3 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_ffa827() {
-  half4 res = exp2(half4(0.0h));
+  half4 res = exp2(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.spvasm
index 9520e91..71e376e 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_ffa827 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Exp2 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Exp2 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %exp2_ffa827
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp2_ffa827
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %exp2_ffa827
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp2_ffa827
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %exp2_ffa827
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp2_ffa827
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.wgsl
index 230ad07..1bd743f 100644
--- a/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/exp2/ffa827.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_ffa827() {
-  var res : vec4<f16> = exp2(vec4<f16>(f16()));
+  var res : vec4<f16> = exp2(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl
index b790070..aeb6d72 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl
@@ -25,7 +25,7 @@
 
 // fn faceForward(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn faceForward_524986() {
-  var res: vec3<f16> = faceForward(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = faceForward(vec3<f16>(1.h), vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.dxc.hlsl
index f9ff272..d6cf67a 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void faceForward_524986() {
-  vector<float16_t, 3> res = faceforward((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = faceforward((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.glsl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.glsl
index 7f22243..4a03ffe 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_524986() {
-  f16vec3 res = faceforward(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = faceforward(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void faceForward_524986() {
-  f16vec3 res = faceforward(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = faceforward(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_524986() {
-  f16vec3 res = faceforward(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = faceforward(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.msl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.msl
index 39be077..9eea5a1 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void faceForward_524986() {
-  half3 res = faceforward(half3(0.0h), half3(0.0h), half3(0.0h));
+  half3 res = faceforward(half3(1.0h), half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.spvasm
index e9ff4a6..ad5e4f5 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %faceForward_524986 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 FaceForward %17 %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 FaceForward %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %faceForward_524986
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %faceForward_524986
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %faceForward_524986
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %faceForward_524986
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %faceForward_524986
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %faceForward_524986
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.wgsl
index 9c4ec2b..43b0b35 100644
--- a/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/faceForward/524986.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn faceForward_524986() {
-  var res : vec3<f16> = faceForward(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = faceForward(vec3<f16>(1.0h), vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl
index fb1dcfb..d2b290a 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl
@@ -25,7 +25,7 @@
 
 // fn faceForward(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn faceForward_cc63dc() {
-  var res: vec4<f16> = faceForward(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = faceForward(vec4<f16>(1.h), vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.dxc.hlsl
index b59f3b0..ec3d4f84 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void faceForward_cc63dc() {
-  vector<float16_t, 4> res = faceforward((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = faceforward((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.glsl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.glsl
index ab00ae1..6a53621 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_cc63dc() {
-  f16vec4 res = faceforward(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = faceforward(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void faceForward_cc63dc() {
-  f16vec4 res = faceforward(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = faceforward(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_cc63dc() {
-  f16vec4 res = faceforward(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = faceforward(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.msl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.msl
index 982ab0a..423f02e 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void faceForward_cc63dc() {
-  half4 res = faceforward(half4(0.0h), half4(0.0h), half4(0.0h));
+  half4 res = faceforward(half4(1.0h), half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.spvasm
index bfa79fb..a5052c5 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %faceForward_cc63dc = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 FaceForward %17 %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 FaceForward %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %faceForward_cc63dc
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %faceForward_cc63dc
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %faceForward_cc63dc
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %faceForward_cc63dc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %faceForward_cc63dc
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %faceForward_cc63dc
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.wgsl
index 1fca871..5a7e113 100644
--- a/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/faceForward/cc63dc.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn faceForward_cc63dc() {
-  var res : vec4<f16> = faceForward(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = faceForward(vec4<f16>(1.0h), vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl
index bf8db4f..69a787b 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl
@@ -25,7 +25,7 @@
 
 // fn faceForward(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn faceForward_fb0f2e() {
-  var res: vec2<f16> = faceForward(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = faceForward(vec2<f16>(1.h), vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.dxc.hlsl
index a4205ab..0cea4d4 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void faceForward_fb0f2e() {
-  vector<float16_t, 2> res = faceforward((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = faceforward((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.glsl
index 6682c02..91747bf 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_fb0f2e() {
-  f16vec2 res = faceforward(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = faceforward(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void faceForward_fb0f2e() {
-  f16vec2 res = faceforward(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = faceforward(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_fb0f2e() {
-  f16vec2 res = faceforward(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = faceforward(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.msl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.msl
index 9c07359..ef0dd6d 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void faceForward_fb0f2e() {
-  half2 res = faceforward(half2(0.0h), half2(0.0h), half2(0.0h));
+  half2 res = faceforward(half2(1.0h), half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.spvasm
index 20da054..b3e1ff0 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %faceForward_fb0f2e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 FaceForward %17 %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 FaceForward %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %faceForward_fb0f2e
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %faceForward_fb0f2e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %faceForward_fb0f2e
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %faceForward_fb0f2e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %faceForward_fb0f2e
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %faceForward_fb0f2e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.wgsl
index 96b39ad..6f9ce4c 100644
--- a/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/faceForward/fb0f2e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn faceForward_fb0f2e() {
-  var res : vec2<f16> = faceForward(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = faceForward(vec2<f16>(1.0h), vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl
index bbe70ee..a8cfcea 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(vec<3, f16>) -> vec<3, f16>
 fn floor_3802c0() {
-  var res: vec3<f16> = floor(vec3<f16>(f16()));
+  var res: vec3<f16> = floor(vec3<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.dxc.hlsl
index 9974a5b..446e096 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_3802c0() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.glsl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.glsl
index 1007c7d..c3920b3 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_3802c0() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void floor_3802c0() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_3802c0() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.msl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.msl
index 90432ad..0a637cd 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_3802c0() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.spvasm
index 51bbbe3..f2c7055 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_3802c0 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %floor_3802c0
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %floor_3802c0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %floor_3802c0
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %floor_3802c0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %floor_3802c0
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %floor_3802c0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.wgsl
index 454c669..5840b54 100644
--- a/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/floor/3802c0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_3802c0() {
-  var res : vec3<f16> = floor(vec3<f16>(f16()));
+  var res : vec3<f16> = floor(vec3<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl b/test/tint/builtins/gen/literal/floor/84658c.wgsl
index 77a94d5..9cf2adb 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(vec<2, f16>) -> vec<2, f16>
 fn floor_84658c() {
-  var res: vec2<f16> = floor(vec2<f16>(f16()));
+  var res: vec2<f16> = floor(vec2<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.dxc.hlsl
index 5f5a3b6..dbdd75f 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_84658c() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.glsl
index ef5b290..dce9c85 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_84658c() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void floor_84658c() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_84658c() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.msl b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.msl
index 5ee3802..c619d7c 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_84658c() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.spvasm
index 72b7f51..b6a4945 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_84658c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %floor_84658c
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %floor_84658c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %floor_84658c
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %floor_84658c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %floor_84658c
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %floor_84658c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.wgsl
index bbf2ee4..4b7c4d6 100644
--- a/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/floor/84658c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_84658c() {
-  var res : vec2<f16> = floor(vec2<f16>(f16()));
+  var res : vec2<f16> = floor(vec2<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl
index f64f4ec..f5d0a88 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(vec<4, f16>) -> vec<4, f16>
 fn floor_a2d31b() {
-  var res: vec4<f16> = floor(vec4<f16>(f16()));
+  var res: vec4<f16> = floor(vec4<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.dxc.hlsl
index 334112b..e8e43d8 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_a2d31b() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.glsl
index 4d06c11..3463a7f 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_a2d31b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void floor_a2d31b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_a2d31b() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.msl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.msl
index 0e3e4ee..a1b0f04 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_a2d31b() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.spvasm
index a877d97..6f84fa2 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_a2d31b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %floor_a2d31b
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %floor_a2d31b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %floor_a2d31b
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %floor_a2d31b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %floor_a2d31b
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %floor_a2d31b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.wgsl
index 54977de..1772e94 100644
--- a/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/floor/a2d31b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_a2d31b() {
-  var res : vec4<f16> = floor(vec4<f16>(f16()));
+  var res : vec4<f16> = floor(vec4<f16>(1.5h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl
index 5defc31..9eb9fa7 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(f16) -> f16
 fn floor_b6e09c() {
-  var res: f16 = floor(f16());
+  var res: f16 = floor(1.5h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.dxc.hlsl
index 13f7908..fb8121e 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_b6e09c() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.glsl
index 3970d69..4cf7082 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_b6e09c() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void floor_b6e09c() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_b6e09c() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.msl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.msl
index 5f14018..b84aca8 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_b6e09c() {
-  half res = 0.0h;
+  half res = 1.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.spvasm
index 8e6ff79..bb1076b 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_b6e09c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_0
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %floor_b6e09c
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %floor_b6e09c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %floor_b6e09c
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %floor_b6e09c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %floor_b6e09c
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %floor_b6e09c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.wgsl
index 59a04cc..35c2316 100644
--- a/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/floor/b6e09c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_b6e09c() {
-  var res : f16 = floor(f16());
+  var res : f16 = floor(1.5h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl
index 0254023..ab5ebb9 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl
@@ -25,7 +25,7 @@
 
 // fn fma(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn fma_ab7818() {
-  var res: vec4<f16> = fma(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = fma(vec4<f16>(1.h), vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.dxc.hlsl
index 0621f2a..3336b31 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fma_ab7818() {
-  vector<float16_t, 4> res = mad((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = mad((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.glsl
index ea53342..fa4e760 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_ab7818() {
-  f16vec4 res = ((f16vec4(0.0hf)) * (f16vec4(0.0hf)) + (f16vec4(0.0hf)));
+  f16vec4 res = ((f16vec4(1.0hf)) * (f16vec4(1.0hf)) + (f16vec4(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fma_ab7818() {
-  f16vec4 res = ((f16vec4(0.0hf)) * (f16vec4(0.0hf)) + (f16vec4(0.0hf)));
+  f16vec4 res = ((f16vec4(1.0hf)) * (f16vec4(1.0hf)) + (f16vec4(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_ab7818() {
-  f16vec4 res = ((f16vec4(0.0hf)) * (f16vec4(0.0hf)) + (f16vec4(0.0hf)));
+  f16vec4 res = ((f16vec4(1.0hf)) * (f16vec4(1.0hf)) + (f16vec4(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.msl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.msl
index 1e22223..eb2484d 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fma_ab7818() {
-  half4 res = fma(half4(0.0h), half4(0.0h), half4(0.0h));
+  half4 res = fma(half4(1.0h), half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.spvasm
index a5bc45f..ccf40ea 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_ab7818 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Fma %17 %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Fma %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %fma_ab7818
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fma_ab7818
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %fma_ab7818
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fma_ab7818
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %fma_ab7818
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fma_ab7818
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.wgsl
index 0732ab8..d0f3ce4 100644
--- a/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fma/ab7818.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fma_ab7818() {
-  var res : vec4<f16> = fma(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = fma(vec4<f16>(1.0h), vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl
index 332799f..abfb8df 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl
@@ -25,7 +25,7 @@
 
 // fn fma(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn fma_bf21b6() {
-  var res: vec2<f16> = fma(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = fma(vec2<f16>(1.h), vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.dxc.hlsl
index 85963f9..9e48041 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fma_bf21b6() {
-  vector<float16_t, 2> res = mad((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = mad((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.glsl
index 576c850..627c7c9 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_bf21b6() {
-  f16vec2 res = ((f16vec2(0.0hf)) * (f16vec2(0.0hf)) + (f16vec2(0.0hf)));
+  f16vec2 res = ((f16vec2(1.0hf)) * (f16vec2(1.0hf)) + (f16vec2(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fma_bf21b6() {
-  f16vec2 res = ((f16vec2(0.0hf)) * (f16vec2(0.0hf)) + (f16vec2(0.0hf)));
+  f16vec2 res = ((f16vec2(1.0hf)) * (f16vec2(1.0hf)) + (f16vec2(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_bf21b6() {
-  f16vec2 res = ((f16vec2(0.0hf)) * (f16vec2(0.0hf)) + (f16vec2(0.0hf)));
+  f16vec2 res = ((f16vec2(1.0hf)) * (f16vec2(1.0hf)) + (f16vec2(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.msl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.msl
index 7d0d9df..54c227b 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fma_bf21b6() {
-  half2 res = fma(half2(0.0h), half2(0.0h), half2(0.0h));
+  half2 res = fma(half2(1.0h), half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.spvasm
index 4759d35..6b33758 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_bf21b6 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Fma %17 %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Fma %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %fma_bf21b6
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fma_bf21b6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %fma_bf21b6
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fma_bf21b6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %fma_bf21b6
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fma_bf21b6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.wgsl
index dcd733b..6d9f0bd 100644
--- a/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fma/bf21b6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fma_bf21b6() {
-  var res : vec2<f16> = fma(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = fma(vec2<f16>(1.0h), vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl
index 5e605cc..3dfeb73 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl
@@ -25,7 +25,7 @@
 
 // fn fma(f16, f16, f16) -> f16
 fn fma_c8abb3() {
-  var res: f16 = fma(f16(), f16(), f16());
+  var res: f16 = fma(1.h, 1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.dxc.hlsl
index 02d0e31..f6e79c5 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fma_c8abb3() {
-  float16_t res = mad(float16_t(0.0h), float16_t(0.0h), float16_t(0.0h));
+  float16_t res = mad(float16_t(1.0h), float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.glsl
index 86e6a49..8540f07 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_c8abb3() {
-  float16_t res = ((0.0hf) * (0.0hf) + (0.0hf));
+  float16_t res = ((1.0hf) * (1.0hf) + (1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fma_c8abb3() {
-  float16_t res = ((0.0hf) * (0.0hf) + (0.0hf));
+  float16_t res = ((1.0hf) * (1.0hf) + (1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_c8abb3() {
-  float16_t res = ((0.0hf) * (0.0hf) + (0.0hf));
+  float16_t res = ((1.0hf) * (1.0hf) + (1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.msl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.msl
index 9222c9b..1152af9 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fma_c8abb3() {
-  half res = fma(0.0h, 0.0h, 0.0h);
+  half res = fma(1.0h, 1.0h, 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.spvasm
index bc7d248..8bde975 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_c8abb3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Fma %16 %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Fma %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %fma_c8abb3
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %fma_c8abb3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %fma_c8abb3
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %fma_c8abb3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %fma_c8abb3
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %fma_c8abb3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.wgsl
index 44eba43..400a45e 100644
--- a/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fma/c8abb3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fma_c8abb3() {
-  var res : f16 = fma(f16(), f16(), f16());
+  var res : f16 = fma(1.0h, 1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl
index 765d3e6..1d0b583 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl
@@ -25,7 +25,7 @@
 
 // fn fma(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn fma_e7abdc() {
-  var res: vec3<f16> = fma(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = fma(vec3<f16>(1.h), vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.dxc.hlsl
index 5ab1666..4930e9e 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fma_e7abdc() {
-  vector<float16_t, 3> res = mad((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = mad((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.glsl
index c4e4c74..182adee 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_e7abdc() {
-  f16vec3 res = ((f16vec3(0.0hf)) * (f16vec3(0.0hf)) + (f16vec3(0.0hf)));
+  f16vec3 res = ((f16vec3(1.0hf)) * (f16vec3(1.0hf)) + (f16vec3(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fma_e7abdc() {
-  f16vec3 res = ((f16vec3(0.0hf)) * (f16vec3(0.0hf)) + (f16vec3(0.0hf)));
+  f16vec3 res = ((f16vec3(1.0hf)) * (f16vec3(1.0hf)) + (f16vec3(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_e7abdc() {
-  f16vec3 res = ((f16vec3(0.0hf)) * (f16vec3(0.0hf)) + (f16vec3(0.0hf)));
+  f16vec3 res = ((f16vec3(1.0hf)) * (f16vec3(1.0hf)) + (f16vec3(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.msl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.msl
index 3622508..2360c4d 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fma_e7abdc() {
-  half3 res = fma(half3(0.0h), half3(0.0h), half3(0.0h));
+  half3 res = fma(half3(1.0h), half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.spvasm
index daa3de5..b2d0b4c 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_e7abdc = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Fma %17 %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Fma %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %fma_e7abdc
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fma_e7abdc
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %fma_e7abdc
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fma_e7abdc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %fma_e7abdc
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fma_e7abdc
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.wgsl
index 45afac1..b83db18 100644
--- a/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fma/e7abdc.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fma_e7abdc() {
-  var res : vec3<f16> = fma(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = fma(vec3<f16>(1.0h), vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl
index df799a0..835b78a 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(vec<2, f16>) -> vec<2, f16>
 fn fract_181aa9() {
-  var res: vec2<f16> = fract(vec2<f16>(f16()));
+  var res: vec2<f16> = fract(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.dxc.hlsl
index ff11d385..e602eda 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_181aa9() {
-  vector<float16_t, 2> res = frac((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = frac((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.glsl
index 1e4d6bf..c837c60 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_181aa9() {
-  f16vec2 res = fract(f16vec2(0.0hf));
+  f16vec2 res = fract(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fract_181aa9() {
-  f16vec2 res = fract(f16vec2(0.0hf));
+  f16vec2 res = fract(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_181aa9() {
-  f16vec2 res = fract(f16vec2(0.0hf));
+  f16vec2 res = fract(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.msl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.msl
index b807118..c9a1ea8 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_181aa9() {
-  half2 res = fract(half2(0.0h));
+  half2 res = fract(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.spvasm
index 1bd3c4f..9f1b31c 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_181aa9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Fract %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Fract %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %fract_181aa9
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fract_181aa9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %fract_181aa9
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fract_181aa9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %fract_181aa9
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fract_181aa9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.wgsl
index fbad396..c67b415 100644
--- a/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fract/181aa9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_181aa9() {
-  var res : vec2<f16> = fract(vec2<f16>(f16()));
+  var res : vec2<f16> = fract(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl b/test/tint/builtins/gen/literal/fract/498c77.wgsl
index 5f4dd0e..13cadd7 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(vec<4, f16>) -> vec<4, f16>
 fn fract_498c77() {
-  var res: vec4<f16> = fract(vec4<f16>(f16()));
+  var res: vec4<f16> = fract(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.dxc.hlsl
index b6fe7b1..b58ad69 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_498c77() {
-  vector<float16_t, 4> res = frac((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = frac((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.glsl
index 352a8ee..b4f58b9 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_498c77() {
-  f16vec4 res = fract(f16vec4(0.0hf));
+  f16vec4 res = fract(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fract_498c77() {
-  f16vec4 res = fract(f16vec4(0.0hf));
+  f16vec4 res = fract(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_498c77() {
-  f16vec4 res = fract(f16vec4(0.0hf));
+  f16vec4 res = fract(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.msl b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.msl
index 02f42f4..521e56d 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_498c77() {
-  half4 res = fract(half4(0.0h));
+  half4 res = fract(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.spvasm
index 8ab3fda..d4bf720 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_498c77 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Fract %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Fract %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %fract_498c77
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fract_498c77
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %fract_498c77
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fract_498c77
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %fract_498c77
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fract_498c77
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.wgsl
index 33a0794..3c8ac4e 100644
--- a/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fract/498c77.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_498c77() {
-  var res : vec4<f16> = fract(vec4<f16>(f16()));
+  var res : vec4<f16> = fract(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl
index a2c98fd..27348ee 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(vec<3, f16>) -> vec<3, f16>
 fn fract_958a1d() {
-  var res: vec3<f16> = fract(vec3<f16>(f16()));
+  var res: vec3<f16> = fract(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.dxc.hlsl
index 0c8e9a6..998cc75 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_958a1d() {
-  vector<float16_t, 3> res = frac((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = frac((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.glsl
index 19520f7..de3b9ee 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_958a1d() {
-  f16vec3 res = fract(f16vec3(0.0hf));
+  f16vec3 res = fract(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fract_958a1d() {
-  f16vec3 res = fract(f16vec3(0.0hf));
+  f16vec3 res = fract(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_958a1d() {
-  f16vec3 res = fract(f16vec3(0.0hf));
+  f16vec3 res = fract(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.msl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.msl
index fb0e54a..9a814ff 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_958a1d() {
-  half3 res = fract(half3(0.0h));
+  half3 res = fract(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.spvasm
index ea074c7..79831a4 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_958a1d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Fract %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Fract %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %fract_958a1d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fract_958a1d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %fract_958a1d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fract_958a1d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %fract_958a1d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fract_958a1d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.wgsl
index c5cafe6..5fdd153 100644
--- a/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fract/958a1d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_958a1d() {
-  var res : vec3<f16> = fract(vec3<f16>(f16()));
+  var res : vec3<f16> = fract(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl
index e502ba9..8ea12ea 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(f16) -> f16
 fn fract_eb38ce() {
-  var res: f16 = fract(f16());
+  var res: f16 = fract(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.dxc.hlsl
index ffebafe..a4e26da 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_eb38ce() {
-  float16_t res = frac(float16_t(0.0h));
+  float16_t res = frac(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.glsl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.glsl
index ba80d87..dbd83c9 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_eb38ce() {
-  float16_t res = fract(0.0hf);
+  float16_t res = fract(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void fract_eb38ce() {
-  float16_t res = fract(0.0hf);
+  float16_t res = fract(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_eb38ce() {
-  float16_t res = fract(0.0hf);
+  float16_t res = fract(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.msl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.msl
index 7b6600f..e5b9d42 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_eb38ce() {
-  half res = fract(0.0h);
+  half res = fract(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.spvasm
index 0cb23c0..d4f1736 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_eb38ce = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Fract %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Fract %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %fract_eb38ce
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %fract_eb38ce
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %fract_eb38ce
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %fract_eb38ce
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %fract_eb38ce
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %fract_eb38ce
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.wgsl
index 11a5545..c6aa88c 100644
--- a/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/fract/eb38ce.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_eb38ce() {
-  var res : f16 = fract(f16());
+  var res : f16 = fract(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl
index 12ecb47..17720e6 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(vec<4, f16>) -> __frexp_result_vec<4, f16>
 fn frexp_3dd21e() {
-  var res = frexp(vec4<f16>(f16()));
+  var res = frexp(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.dxc.hlsl
index a2155f1..513bf10 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_3dd21e() {
-  frexp_result_vec4_f16 res = tint_frexp((float16_t(0.0h)).xxxx);
+  frexp_result_vec4_f16 res = tint_frexp((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.glsl
index ba7ca1f..16ebca6 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_3dd21e() {
-  frexp_result_vec4_f16 res = tint_frexp(f16vec4(0.0hf));
+  frexp_result_vec4_f16 res = tint_frexp(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void frexp_3dd21e() {
-  frexp_result_vec4_f16 res = tint_frexp(f16vec4(0.0hf));
+  frexp_result_vec4_f16 res = tint_frexp(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void frexp_3dd21e() {
-  frexp_result_vec4_f16 res = tint_frexp(f16vec4(0.0hf));
+  frexp_result_vec4_f16 res = tint_frexp(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.msl
index 91c87e7..e87a091 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_3dd21e() {
-  frexp_result_vec4_f16 res = tint_frexp(half4(0.0h));
+  frexp_result_vec4_f16 res = tint_frexp(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.spvasm
index 6585dc0..f798344 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -45,37 +45,38 @@
         %int = OpTypeInt 32 1
       %v4int = OpTypeVector %int 4
 %__frexp_result_vec4_f16 = OpTypeStruct %v4half %v4int
-         %20 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %21 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function___frexp_result_vec4_f16 = OpTypePointer Function %__frexp_result_vec4_f16
-         %23 = OpConstantNull %__frexp_result_vec4_f16
-         %24 = OpTypeFunction %v4float
+         %24 = OpConstantNull %__frexp_result_vec4_f16
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_3dd21e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function___frexp_result_vec4_f16 Function %23
-         %13 = OpExtInst %__frexp_result_vec4_f16 %19 FrexpStruct %20
+        %res = OpVariable %_ptr_Function___frexp_result_vec4_f16 Function %24
+         %13 = OpExtInst %__frexp_result_vec4_f16 %19 FrexpStruct %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %frexp_3dd21e
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %frexp_3dd21e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_3dd21e
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %frexp_3dd21e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_3dd21e
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %frexp_3dd21e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.wgsl
index a33fbd0..575b3c9 100644
--- a/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/3dd21e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_3dd21e() {
-  var res = frexp(vec4<f16>(f16()));
+  var res = frexp(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl
index 6f4f993..2843cee 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(f16) -> __frexp_result<f16>
 fn frexp_5257dd() {
-  var res = frexp(f16());
+  var res = frexp(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.dxc.hlsl
index 9e34fba..0ea874f 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_5257dd() {
-  frexp_result_f16 res = tint_frexp(float16_t(0.0h));
+  frexp_result_f16 res = tint_frexp(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.glsl
index f08939e..191bed3 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_5257dd() {
-  frexp_result_f16 res = tint_frexp(0.0hf);
+  frexp_result_f16 res = tint_frexp(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void frexp_5257dd() {
-  frexp_result_f16 res = tint_frexp(0.0hf);
+  frexp_result_f16 res = tint_frexp(1.0hf);
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void frexp_5257dd() {
-  frexp_result_f16 res = tint_frexp(0.0hf);
+  frexp_result_f16 res = tint_frexp(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.msl
index 1920b16..44ba76b 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_5257dd() {
-  frexp_result_f16 res = tint_frexp(0.0h);
+  frexp_result_f16 res = tint_frexp(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.spvasm
index 6c20d39..79d1964 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.spvasm
@@ -43,7 +43,7 @@
        %half = OpTypeFloat 16
         %int = OpTypeInt 32 1
 %__frexp_result_f16 = OpTypeStruct %half %int
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function___frexp_result_f16 = OpTypePointer Function %__frexp_result_f16
          %21 = OpConstantNull %__frexp_result_f16
          %22 = OpTypeFunction %v4float
@@ -51,7 +51,7 @@
 %frexp_5257dd = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___frexp_result_f16 Function %21
-         %13 = OpExtInst %__frexp_result_f16 %17 FrexpStruct %18
+         %13 = OpExtInst %__frexp_result_f16 %17 FrexpStruct %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.wgsl
index ca55834..fbf57be 100644
--- a/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/5257dd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_5257dd() {
-  var res = frexp(f16());
+  var res = frexp(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl
index 7d784db..9483fb2 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(vec<2, f16>) -> __frexp_result_vec<2, f16>
 fn frexp_5f47bf() {
-  var res = frexp(vec2<f16>(f16()));
+  var res = frexp(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.dxc.hlsl
index b39e0d6..5408e3d 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_5f47bf() {
-  frexp_result_vec2_f16 res = tint_frexp((float16_t(0.0h)).xx);
+  frexp_result_vec2_f16 res = tint_frexp((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.glsl
index 4a75e6c..30a4538 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_5f47bf() {
-  frexp_result_vec2_f16 res = tint_frexp(f16vec2(0.0hf));
+  frexp_result_vec2_f16 res = tint_frexp(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void frexp_5f47bf() {
-  frexp_result_vec2_f16 res = tint_frexp(f16vec2(0.0hf));
+  frexp_result_vec2_f16 res = tint_frexp(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void frexp_5f47bf() {
-  frexp_result_vec2_f16 res = tint_frexp(f16vec2(0.0hf));
+  frexp_result_vec2_f16 res = tint_frexp(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.msl
index a2290a8..2448316 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_5f47bf() {
-  frexp_result_vec2_f16 res = tint_frexp(half2(0.0h));
+  frexp_result_vec2_f16 res = tint_frexp(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.spvasm
index e1c51b9..88ffe88 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -45,37 +45,38 @@
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
 %__frexp_result_vec2_f16 = OpTypeStruct %v2half %v2int
-         %20 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %21 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function___frexp_result_vec2_f16 = OpTypePointer Function %__frexp_result_vec2_f16
-         %23 = OpConstantNull %__frexp_result_vec2_f16
-         %24 = OpTypeFunction %v4float
+         %24 = OpConstantNull %__frexp_result_vec2_f16
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_5f47bf = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function___frexp_result_vec2_f16 Function %23
-         %13 = OpExtInst %__frexp_result_vec2_f16 %19 FrexpStruct %20
+        %res = OpVariable %_ptr_Function___frexp_result_vec2_f16 Function %24
+         %13 = OpExtInst %__frexp_result_vec2_f16 %19 FrexpStruct %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %frexp_5f47bf
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %frexp_5f47bf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_5f47bf
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %frexp_5f47bf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_5f47bf
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %frexp_5f47bf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.wgsl
index 5dd980e..f933947 100644
--- a/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/5f47bf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_5f47bf() {
-  var res = frexp(vec2<f16>(f16()));
+  var res = frexp(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl
index 9b89a6b..774db54 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(vec<3, f16>) -> __frexp_result_vec<3, f16>
 fn frexp_ae4a66() {
-  var res = frexp(vec3<f16>(f16()));
+  var res = frexp(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.dxc.hlsl
index 35d6455..0d0e950 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_ae4a66() {
-  frexp_result_vec3_f16 res = tint_frexp((float16_t(0.0h)).xxx);
+  frexp_result_vec3_f16 res = tint_frexp((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.glsl b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.glsl
index e1b82e8..a3f39d9 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_ae4a66() {
-  frexp_result_vec3_f16 res = tint_frexp(f16vec3(0.0hf));
+  frexp_result_vec3_f16 res = tint_frexp(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void frexp_ae4a66() {
-  frexp_result_vec3_f16 res = tint_frexp(f16vec3(0.0hf));
+  frexp_result_vec3_f16 res = tint_frexp(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void frexp_ae4a66() {
-  frexp_result_vec3_f16 res = tint_frexp(f16vec3(0.0hf));
+  frexp_result_vec3_f16 res = tint_frexp(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.msl b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.msl
index b58cc10..b2398cf 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_ae4a66() {
-  frexp_result_vec3_f16 res = tint_frexp(half3(0.0h));
+  frexp_result_vec3_f16 res = tint_frexp(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.spvasm
index 5bf4a21b..5f14309 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -45,37 +45,38 @@
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
 %__frexp_result_vec3_f16 = OpTypeStruct %v3half %v3int
-         %20 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %21 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function___frexp_result_vec3_f16 = OpTypePointer Function %__frexp_result_vec3_f16
-         %23 = OpConstantNull %__frexp_result_vec3_f16
-         %24 = OpTypeFunction %v4float
+         %24 = OpConstantNull %__frexp_result_vec3_f16
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_ae4a66 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function___frexp_result_vec3_f16 Function %23
-         %13 = OpExtInst %__frexp_result_vec3_f16 %19 FrexpStruct %20
+        %res = OpVariable %_ptr_Function___frexp_result_vec3_f16 Function %24
+         %13 = OpExtInst %__frexp_result_vec3_f16 %19 FrexpStruct %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %frexp_ae4a66
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %frexp_ae4a66
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %frexp_ae4a66
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %frexp_ae4a66
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_ae4a66
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %frexp_ae4a66
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.wgsl
index fcec0eb..6e1393a 100644
--- a/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/frexp/ae4a66.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_ae4a66() {
-  var res = frexp(vec3<f16>(f16()));
+  var res = frexp(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl
index fba79b2..afe3a8b 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(f16) -> f16
 fn inverseSqrt_440300() {
-  var res: f16 = inverseSqrt(f16());
+  var res: f16 = inverseSqrt(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.dxc.hlsl
index 39bea64..147b2ec 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_440300() {
-  float16_t res = rsqrt(float16_t(0.0h));
+  float16_t res = rsqrt(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.glsl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.glsl
index 8cc5283..9f1eaf6 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_440300() {
-  float16_t res = inversesqrt(0.0hf);
+  float16_t res = inversesqrt(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void inverseSqrt_440300() {
-  float16_t res = inversesqrt(0.0hf);
+  float16_t res = inversesqrt(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_440300() {
-  float16_t res = inversesqrt(0.0hf);
+  float16_t res = inversesqrt(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.msl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.msl
index 0cab7ac..0b73e38 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_440300() {
-  half res = rsqrt(0.0h);
+  half res = rsqrt(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.spvasm
index 49ae296..d2b8dc4 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_440300 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 InverseSqrt %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 InverseSqrt %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %inverseSqrt_440300
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %inverseSqrt_440300
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %inverseSqrt_440300
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %inverseSqrt_440300
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %inverseSqrt_440300
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %inverseSqrt_440300
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.wgsl
index c2b635a..239d135 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/440300.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_440300() {
-  var res : f16 = inverseSqrt(f16());
+  var res : f16 = inverseSqrt(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl
index af9bc17..453596b 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(vec<2, f16>) -> vec<2, f16>
 fn inverseSqrt_5f51f8() {
-  var res: vec2<f16> = inverseSqrt(vec2<f16>(f16()));
+  var res: vec2<f16> = inverseSqrt(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl
index f58be18..c84c61d 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_5f51f8() {
-  vector<float16_t, 2> res = rsqrt((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = rsqrt((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.glsl
index 4e73df6..3b37871 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_5f51f8() {
-  f16vec2 res = inversesqrt(f16vec2(0.0hf));
+  f16vec2 res = inversesqrt(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void inverseSqrt_5f51f8() {
-  f16vec2 res = inversesqrt(f16vec2(0.0hf));
+  f16vec2 res = inversesqrt(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_5f51f8() {
-  f16vec2 res = inversesqrt(f16vec2(0.0hf));
+  f16vec2 res = inversesqrt(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.msl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.msl
index 2e7d4bd9..d396e65 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_5f51f8() {
-  half2 res = rsqrt(half2(0.0h));
+  half2 res = rsqrt(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.spvasm
index cd5caca..10e31d2 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_5f51f8 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 InverseSqrt %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 InverseSqrt %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %inverseSqrt_5f51f8
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %inverseSqrt_5f51f8
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %inverseSqrt_5f51f8
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %inverseSqrt_5f51f8
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %inverseSqrt_5f51f8
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %inverseSqrt_5f51f8
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.wgsl
index 672f0e3..6db63ba 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/5f51f8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_5f51f8() {
-  var res : vec2<f16> = inverseSqrt(vec2<f16>(f16()));
+  var res : vec2<f16> = inverseSqrt(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl
index 2a389e2..da9f44f 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(vec<3, f16>) -> vec<3, f16>
 fn inverseSqrt_b85ebd() {
-  var res: vec3<f16> = inverseSqrt(vec3<f16>(f16()));
+  var res: vec3<f16> = inverseSqrt(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl
index ef654c9..bf7a098 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_b85ebd() {
-  vector<float16_t, 3> res = rsqrt((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = rsqrt((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.glsl
index 12e5cab..ee6af34 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_b85ebd() {
-  f16vec3 res = inversesqrt(f16vec3(0.0hf));
+  f16vec3 res = inversesqrt(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void inverseSqrt_b85ebd() {
-  f16vec3 res = inversesqrt(f16vec3(0.0hf));
+  f16vec3 res = inversesqrt(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_b85ebd() {
-  f16vec3 res = inversesqrt(f16vec3(0.0hf));
+  f16vec3 res = inversesqrt(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.msl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.msl
index 351560a..d5823b9 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_b85ebd() {
-  half3 res = rsqrt(half3(0.0h));
+  half3 res = rsqrt(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.spvasm
index 05243bc..76557ce 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_b85ebd = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 InverseSqrt %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 InverseSqrt %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %inverseSqrt_b85ebd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %inverseSqrt_b85ebd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %inverseSqrt_b85ebd
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %inverseSqrt_b85ebd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %inverseSqrt_b85ebd
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %inverseSqrt_b85ebd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.wgsl
index e9c1e7e..8345b10 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/b85ebd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_b85ebd() {
-  var res : vec3<f16> = inverseSqrt(vec3<f16>(f16()));
+  var res : vec3<f16> = inverseSqrt(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl
index 8657926..3763326 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(vec<4, f16>) -> vec<4, f16>
 fn inverseSqrt_cbdc70() {
-  var res: vec4<f16> = inverseSqrt(vec4<f16>(f16()));
+  var res: vec4<f16> = inverseSqrt(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl
index ed1f192..1f6b955 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_cbdc70() {
-  vector<float16_t, 4> res = rsqrt((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = rsqrt((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.glsl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.glsl
index 43f1eda..f0261cd 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_cbdc70() {
-  f16vec4 res = inversesqrt(f16vec4(0.0hf));
+  f16vec4 res = inversesqrt(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void inverseSqrt_cbdc70() {
-  f16vec4 res = inversesqrt(f16vec4(0.0hf));
+  f16vec4 res = inversesqrt(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_cbdc70() {
-  f16vec4 res = inversesqrt(f16vec4(0.0hf));
+  f16vec4 res = inversesqrt(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.msl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.msl
index f1610f8..f1f1cc1 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_cbdc70() {
-  half4 res = rsqrt(half4(0.0h));
+  half4 res = rsqrt(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.spvasm
index 43367c1..f27f99c 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_cbdc70 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 InverseSqrt %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 InverseSqrt %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %inverseSqrt_cbdc70
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %inverseSqrt_cbdc70
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %inverseSqrt_cbdc70
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %inverseSqrt_cbdc70
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %inverseSqrt_cbdc70
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %inverseSqrt_cbdc70
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.wgsl
index 2290320..8ef3f09 100644
--- a/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/inverseSqrt/cbdc70.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_cbdc70() {
-  var res : vec4<f16> = inverseSqrt(vec4<f16>(f16()));
+  var res : vec4<f16> = inverseSqrt(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl
index 69dc8b4..c5c06c3 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(vec<2, f16>, vec<2, i32>) -> vec<2, f16>
 fn ldexp_3d90b4() {
-  var res: vec2<f16> = ldexp(vec2<f16>(f16()), vec2<i32>(1i));
+  var res: vec2<f16> = ldexp(vec2<f16>(1.h), vec2<i32>(1i));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.dxc.hlsl
index ae0933e..beb62a6 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_3d90b4() {
-  vector<float16_t, 2> res = ldexp((float16_t(0.0h)).xx, (1).xx);
+  vector<float16_t, 2> res = ldexp((float16_t(1.0h)).xx, (1).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.glsl
index 74ee06a..7779006 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_3d90b4() {
-  f16vec2 res = ldexp(f16vec2(0.0hf), ivec2(1));
+  f16vec2 res = ldexp(f16vec2(1.0hf), ivec2(1));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ldexp_3d90b4() {
-  f16vec2 res = ldexp(f16vec2(0.0hf), ivec2(1));
+  f16vec2 res = ldexp(f16vec2(1.0hf), ivec2(1));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_3d90b4() {
-  f16vec2 res = ldexp(f16vec2(0.0hf), ivec2(1));
+  f16vec2 res = ldexp(f16vec2(1.0hf), ivec2(1));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.msl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.msl
index 9d9e2ac..458ac36 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_3d90b4() {
-  half2 res = ldexp(half2(0.0h), int2(1));
+  half2 res = ldexp(half2(1.0h), int2(1));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.spvasm
index 0847908..69d848c 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,40 +37,42 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
       %int_1 = OpConstant %int 1
-         %21 = OpConstantComposite %v2int %int_1 %int_1
+         %22 = OpConstantComposite %v2int %int_1 %int_1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %25 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_3d90b4 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Ldexp %17 %21
+        %res = OpVariable %_ptr_Function_v2half Function %25
+         %13 = OpExtInst %v2half %16 Ldexp %18 %22
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %ldexp_3d90b4
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %ldexp_3d90b4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %ldexp_3d90b4
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %ldexp_3d90b4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %ldexp_3d90b4
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %ldexp_3d90b4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.wgsl
index c41562f..5c65862 100644
--- a/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/3d90b4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_3d90b4() {
-  var res : vec2<f16> = ldexp(vec2<f16>(f16()), vec2<i32>(1i));
+  var res : vec2<f16> = ldexp(vec2<f16>(1.0h), vec2<i32>(1i));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl
index 5fde9f3..555800b 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(f16, i32) -> f16
 fn ldexp_624e0c() {
-  var res: f16 = ldexp(f16(), 1i);
+  var res: f16 = ldexp(1.h, 1i);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.dxc.hlsl
index c978bcf..400d56b 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_624e0c() {
-  float16_t res = ldexp(float16_t(0.0h), 1);
+  float16_t res = ldexp(float16_t(1.0h), 1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.glsl
index f856c62..1ad1643 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_624e0c() {
-  float16_t res = ldexp(0.0hf, 1);
+  float16_t res = ldexp(1.0hf, 1);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ldexp_624e0c() {
-  float16_t res = ldexp(0.0hf, 1);
+  float16_t res = ldexp(1.0hf, 1);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_624e0c() {
-  float16_t res = ldexp(0.0hf, 1);
+  float16_t res = ldexp(1.0hf, 1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.msl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.msl
index e63d736..87d24f3 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_624e0c() {
-  half res = ldexp(0.0h, 1);
+  half res = ldexp(1.0h, 1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.spvasm
index 13ce908..ca7b0f2 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,38 +36,39 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_624e0c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Ldexp %16 %int_1
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Ldexp %half_0x1p_0 %int_1
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %ldexp_624e0c
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %ldexp_624e0c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %ldexp_624e0c
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %ldexp_624e0c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %ldexp_624e0c
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %ldexp_624e0c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.wgsl
index 9eebbae..540d1ad 100644
--- a/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/624e0c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_624e0c() {
-  var res : f16 = ldexp(f16(), 1i);
+  var res : f16 = ldexp(1.0h, 1i);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl
index b6e104b..2ec9d3c 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(vec<3, f16>, vec<3, i32>) -> vec<3, f16>
 fn ldexp_7485ce() {
-  var res: vec3<f16> = ldexp(vec3<f16>(f16()), vec3<i32>(1i));
+  var res: vec3<f16> = ldexp(vec3<f16>(1.h), vec3<i32>(1i));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.dxc.hlsl
index 731bb5d..030092c 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_7485ce() {
-  vector<float16_t, 3> res = ldexp((float16_t(0.0h)).xxx, (1).xxx);
+  vector<float16_t, 3> res = ldexp((float16_t(1.0h)).xxx, (1).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.glsl
index 4a19e3c..105e249 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7485ce() {
-  f16vec3 res = ldexp(f16vec3(0.0hf), ivec3(1));
+  f16vec3 res = ldexp(f16vec3(1.0hf), ivec3(1));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ldexp_7485ce() {
-  f16vec3 res = ldexp(f16vec3(0.0hf), ivec3(1));
+  f16vec3 res = ldexp(f16vec3(1.0hf), ivec3(1));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7485ce() {
-  f16vec3 res = ldexp(f16vec3(0.0hf), ivec3(1));
+  f16vec3 res = ldexp(f16vec3(1.0hf), ivec3(1));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.msl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.msl
index b5d93bf..a29ffa3 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_7485ce() {
-  half3 res = ldexp(half3(0.0h), int3(1));
+  half3 res = ldexp(half3(1.0h), int3(1));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.spvasm
index 985d489..44a5e07 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,40 +37,42 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_1 = OpConstant %int 1
-         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+         %22 = OpConstantComposite %v3int %int_1 %int_1 %int_1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %25 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_7485ce = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Ldexp %17 %21
+        %res = OpVariable %_ptr_Function_v3half Function %25
+         %13 = OpExtInst %v3half %16 Ldexp %18 %22
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %ldexp_7485ce
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %ldexp_7485ce
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %ldexp_7485ce
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %ldexp_7485ce
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %ldexp_7485ce
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %ldexp_7485ce
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.wgsl
index 8ddaf04..d55a6aa 100644
--- a/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/7485ce.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_7485ce() {
-  var res : vec3<f16> = ldexp(vec3<f16>(f16()), vec3<i32>(1i));
+  var res : vec3<f16> = ldexp(vec3<f16>(1.0h), vec3<i32>(1i));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl
index 2e56210..03cec0f 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(vec<4, f16>, vec<4, i32>) -> vec<4, f16>
 fn ldexp_7fa13c() {
-  var res: vec4<f16> = ldexp(vec4<f16>(f16()), vec4<i32>(1i));
+  var res: vec4<f16> = ldexp(vec4<f16>(1.h), vec4<i32>(1i));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.dxc.hlsl
index 774c31e..36931fc 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_7fa13c() {
-  vector<float16_t, 4> res = ldexp((float16_t(0.0h)).xxxx, (1).xxxx);
+  vector<float16_t, 4> res = ldexp((float16_t(1.0h)).xxxx, (1).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.glsl
index 30b6c1d..2ac9122 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7fa13c() {
-  f16vec4 res = ldexp(f16vec4(0.0hf), ivec4(1));
+  f16vec4 res = ldexp(f16vec4(1.0hf), ivec4(1));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void ldexp_7fa13c() {
-  f16vec4 res = ldexp(f16vec4(0.0hf), ivec4(1));
+  f16vec4 res = ldexp(f16vec4(1.0hf), ivec4(1));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7fa13c() {
-  f16vec4 res = ldexp(f16vec4(0.0hf), ivec4(1));
+  f16vec4 res = ldexp(f16vec4(1.0hf), ivec4(1));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.msl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.msl
index b348e4a..536316a 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_7fa13c() {
-  half4 res = ldexp(half4(0.0h), int4(1));
+  half4 res = ldexp(half4(1.0h), int4(1));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.spvasm
index f389bc3..1ddace3 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,40 +37,42 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
         %int = OpTypeInt 32 1
       %v4int = OpTypeVector %int 4
       %int_1 = OpConstant %int 1
-         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %22 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %25 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_7fa13c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Ldexp %17 %21
+        %res = OpVariable %_ptr_Function_v4half Function %25
+         %13 = OpExtInst %v4half %16 Ldexp %18 %22
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %ldexp_7fa13c
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %ldexp_7fa13c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %ldexp_7fa13c
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %ldexp_7fa13c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %ldexp_7fa13c
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %ldexp_7fa13c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.wgsl
index 25b5d9d..9c2998f 100644
--- a/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/ldexp/7fa13c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_7fa13c() {
-  var res : vec4<f16> = ldexp(vec4<f16>(f16()), vec4<i32>(1i));
+  var res : vec4<f16> = ldexp(vec4<f16>(1.0h), vec4<i32>(1i));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl
index 4306efe..61b3d2b 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<2, f16>) -> f16
 fn length_3f0e13() {
-  var res: f16 = length(vec2<f16>(f16()));
+  var res: f16 = length(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl
index 08660e8..aeb2c63 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_3f0e13() {
-  float16_t res = length((float16_t(0.0h)).xx);
+  float16_t res = length((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl
index ff3bb99..d1738a3 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  float16_t res = length(f16vec2(0.0hf));
+  float16_t res = length(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_3f0e13() {
-  float16_t res = length(f16vec2(0.0hf));
+  float16_t res = length(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  float16_t res = length(f16vec2(0.0hf));
+  float16_t res = length(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl
index 2aadef9..82464e6 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_3f0e13() {
-  half res = length(half2(0.0h));
+  half res = length(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm
index 5809762..c026dd5 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %20 = OpConstantNull %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_3f0e13 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %20
-         %13 = OpExtInst %half %15 Length %17
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Length %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %length_3f0e13
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_3f0e13
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %length_3f0e13
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_3f0e13
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl
index d97f9c8..295b05e 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_3f0e13() {
-  var res : f16 = length(vec2<f16>(f16()));
+  var res : f16 = length(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl
index be2dbf1..50a2ef1 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<4, f16>) -> f16
 fn length_5b1a9b() {
-  var res: f16 = length(vec4<f16>(f16()));
+  var res: f16 = length(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl
index efaee52..df13890 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_5b1a9b() {
-  float16_t res = length((float16_t(0.0h)).xxxx);
+  float16_t res = length((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl
index 0fc5433..faca950 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  float16_t res = length(f16vec4(0.0hf));
+  float16_t res = length(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_5b1a9b() {
-  float16_t res = length(f16vec4(0.0hf));
+  float16_t res = length(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  float16_t res = length(f16vec4(0.0hf));
+  float16_t res = length(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl
index c1013ee..dff63ba 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_5b1a9b() {
-  half res = length(half4(0.0h));
+  half res = length(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm
index c112767..bdc9042 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %20 = OpConstantNull %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_5b1a9b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %20
-         %13 = OpExtInst %half %15 Length %17
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Length %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %length_5b1a9b
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_5b1a9b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %length_5b1a9b
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_5b1a9b
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl
index 526971a..e94fb3f 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_5b1a9b() {
-  var res : f16 = length(vec4<f16>(f16()));
+  var res : f16 = length(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl
index a51f78a..cca9b19 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<3, f16>) -> f16
 fn length_ba16d6() {
-  var res: f16 = length(vec3<f16>(f16()));
+  var res: f16 = length(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl
index c0c7954..9cb7003 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_ba16d6() {
-  float16_t res = length((float16_t(0.0h)).xxx);
+  float16_t res = length((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl
index 57c51de..676602a 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  float16_t res = length(f16vec3(0.0hf));
+  float16_t res = length(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_ba16d6() {
-  float16_t res = length(f16vec3(0.0hf));
+  float16_t res = length(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  float16_t res = length(f16vec3(0.0hf));
+  float16_t res = length(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl
index c5e5059..02c8d79 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_ba16d6() {
-  half res = length(half3(0.0h));
+  half res = length(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm
index 9cb2b45..bb6cac0 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_half = OpTypePointer Function %half
-         %20 = OpConstantNull %half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_ba16d6 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %20
-         %13 = OpExtInst %half %15 Length %17
+        %res = OpVariable %_ptr_Function_half Function %21
+         %13 = OpExtInst %half %15 Length %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %length_ba16d6
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_ba16d6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %length_ba16d6
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_ba16d6
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl
index ef23cb8..7c54ecb 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_ba16d6() {
-  var res : f16 = length(vec3<f16>(f16()));
+  var res : f16 = length(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl b/test/tint/builtins/gen/literal/length/c158da.wgsl
index 70b692f..cde0e0c 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(f16) -> f16
 fn length_c158da() {
-  var res: f16 = length(f16());
+  var res: f16 = length(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl
index 5b0e775..05771c2 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_c158da() {
-  float16_t res = length(float16_t(0.0h));
+  float16_t res = length(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl
index afc15b3..d60a08b 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t res = length(0.0hf);
+  float16_t res = length(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_c158da() {
-  float16_t res = length(0.0hf);
+  float16_t res = length(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t res = length(0.0hf);
+  float16_t res = length(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl
index f9f3a70..b1858e1 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_c158da() {
-  half res = fabs(0.0h);
+  half res = fabs(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm
index 8199018..ec976a1 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_c158da = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Length %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Length %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %length_c158da
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %length_c158da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %length_c158da
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_c158da
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl
index 3cbfcfe..66e82b1 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_c158da() {
-  var res : f16 = length(f16());
+  var res : f16 = length(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl
index 761a154..21cfca0 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(vec<3, f16>) -> vec<3, f16>
 fn log_6ff86f() {
-  var res: vec3<f16> = log(vec3<f16>(f16()));
+  var res: vec3<f16> = log(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.dxc.hlsl
index b141371..8d17f97 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_6ff86f() {
-  vector<float16_t, 3> res = log((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = log((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.glsl
index 2d6e06d..5efd1c3 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_6ff86f() {
-  f16vec3 res = log(f16vec3(0.0hf));
+  f16vec3 res = log(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log_6ff86f() {
-  f16vec3 res = log(f16vec3(0.0hf));
+  f16vec3 res = log(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_6ff86f() {
-  f16vec3 res = log(f16vec3(0.0hf));
+  f16vec3 res = log(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.msl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.msl
index ae29414..5b4c531 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_6ff86f() {
-  half3 res = log(half3(0.0h));
+  half3 res = log(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.spvasm
index 51676f2..2579458 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_6ff86f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Log %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Log %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %log_6ff86f
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log_6ff86f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %log_6ff86f
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log_6ff86f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %log_6ff86f
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log_6ff86f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.wgsl
index 9fbbe3e..856ac22 100644
--- a/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log/6ff86f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_6ff86f() {
-  var res : vec3<f16> = log(vec3<f16>(f16()));
+  var res : vec3<f16> = log(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl
index 0f6db81..82cf025 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(vec<2, f16>) -> vec<2, f16>
 fn log_8f0e32() {
-  var res: vec2<f16> = log(vec2<f16>(f16()));
+  var res: vec2<f16> = log(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.dxc.hlsl
index c73463a..eebe64c 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_8f0e32() {
-  vector<float16_t, 2> res = log((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = log((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.glsl
index 923ec6a..b75bf0d 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_8f0e32() {
-  f16vec2 res = log(f16vec2(0.0hf));
+  f16vec2 res = log(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log_8f0e32() {
-  f16vec2 res = log(f16vec2(0.0hf));
+  f16vec2 res = log(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_8f0e32() {
-  f16vec2 res = log(f16vec2(0.0hf));
+  f16vec2 res = log(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.msl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.msl
index ecced22..2d48740 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_8f0e32() {
-  half2 res = log(half2(0.0h));
+  half2 res = log(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.spvasm
index 7ff10aa..2a6e432 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_8f0e32 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Log %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Log %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %log_8f0e32
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log_8f0e32
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %log_8f0e32
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log_8f0e32
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %log_8f0e32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log_8f0e32
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.wgsl
index e2a7276..d483486 100644
--- a/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log/8f0e32.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_8f0e32() {
-  var res : vec2<f16> = log(vec2<f16>(f16()));
+  var res : vec2<f16> = log(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl b/test/tint/builtins/gen/literal/log/c9f489.wgsl
index 659b08c..905c963 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(f16) -> f16
 fn log_c9f489() {
-  var res: f16 = log(f16());
+  var res: f16 = log(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.dxc.hlsl
index eb5150b..358ac77 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_c9f489() {
-  float16_t res = log(float16_t(0.0h));
+  float16_t res = log(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.glsl
index 62eeaa9..2ae51ee 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_c9f489() {
-  float16_t res = log(0.0hf);
+  float16_t res = log(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log_c9f489() {
-  float16_t res = log(0.0hf);
+  float16_t res = log(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_c9f489() {
-  float16_t res = log(0.0hf);
+  float16_t res = log(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.msl b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.msl
index 65bd95a..cae5ee0 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_c9f489() {
-  half res = log(0.0h);
+  half res = log(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.spvasm
index 304b6ec..ddf328c 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_c9f489 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Log %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Log %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %log_c9f489
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %log_c9f489
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %log_c9f489
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %log_c9f489
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log_c9f489
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %log_c9f489
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.wgsl
index 6279a42..b3b61f4 100644
--- a/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log/c9f489.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_c9f489() {
-  var res : f16 = log(f16());
+  var res : f16 = log(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl
index 4482675..92cf108 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(vec<4, f16>) -> vec<4, f16>
 fn log_cdbdc1() {
-  var res: vec4<f16> = log(vec4<f16>(f16()));
+  var res: vec4<f16> = log(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.dxc.hlsl
index 754e290..0ce91e5 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_cdbdc1() {
-  vector<float16_t, 4> res = log((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = log((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.glsl
index 41e6eab..272fe40 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_cdbdc1() {
-  f16vec4 res = log(f16vec4(0.0hf));
+  f16vec4 res = log(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log_cdbdc1() {
-  f16vec4 res = log(f16vec4(0.0hf));
+  f16vec4 res = log(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_cdbdc1() {
-  f16vec4 res = log(f16vec4(0.0hf));
+  f16vec4 res = log(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.msl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.msl
index 77806e8..7463beb 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_cdbdc1() {
-  half4 res = log(half4(0.0h));
+  half4 res = log(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.spvasm
index 6eea354..a8a48f1 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_cdbdc1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Log %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Log %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %log_cdbdc1
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log_cdbdc1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %log_cdbdc1
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log_cdbdc1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %log_cdbdc1
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log_cdbdc1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.wgsl
index 645ccf9..dbe96d2 100644
--- a/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log/cdbdc1.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_cdbdc1() {
-  var res : vec4<f16> = log(vec4<f16>(f16()));
+  var res : vec4<f16> = log(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl b/test/tint/builtins/gen/literal/log2/38b478.wgsl
index 493fbb2..ae09148 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(vec<3, f16>) -> vec<3, f16>
 fn log2_38b478() {
-  var res: vec3<f16> = log2(vec3<f16>(f16()));
+  var res: vec3<f16> = log2(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.dxc.hlsl
index 029b567..487dd6f 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_38b478() {
-  vector<float16_t, 3> res = log2((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = log2((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.glsl
index e0f07c6..a48af86 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_38b478() {
-  f16vec3 res = log2(f16vec3(0.0hf));
+  f16vec3 res = log2(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log2_38b478() {
-  f16vec3 res = log2(f16vec3(0.0hf));
+  f16vec3 res = log2(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_38b478() {
-  f16vec3 res = log2(f16vec3(0.0hf));
+  f16vec3 res = log2(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.msl b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.msl
index a36b81f..8a6fb00 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_38b478() {
-  half3 res = log2(half3(0.0h));
+  half3 res = log2(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.spvasm
index de97fed..e150bb5 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_38b478 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Log2 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Log2 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %log2_38b478
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log2_38b478
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %log2_38b478
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log2_38b478
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %log2_38b478
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log2_38b478
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.wgsl
index 9dee10e..993448c 100644
--- a/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log2/38b478.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_38b478() {
-  var res : vec3<f16> = log2(vec3<f16>(f16()));
+  var res : vec3<f16> = log2(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl b/test/tint/builtins/gen/literal/log2/776088.wgsl
index 3843754..4ee097b 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(vec<4, f16>) -> vec<4, f16>
 fn log2_776088() {
-  var res: vec4<f16> = log2(vec4<f16>(f16()));
+  var res: vec4<f16> = log2(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.dxc.hlsl
index 2a3af8f..70fb5d8 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_776088() {
-  vector<float16_t, 4> res = log2((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = log2((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.glsl
index ebf4aa1..2024e28 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_776088() {
-  f16vec4 res = log2(f16vec4(0.0hf));
+  f16vec4 res = log2(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log2_776088() {
-  f16vec4 res = log2(f16vec4(0.0hf));
+  f16vec4 res = log2(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_776088() {
-  f16vec4 res = log2(f16vec4(0.0hf));
+  f16vec4 res = log2(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.msl b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.msl
index eae4b4d..62e73b1 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_776088() {
-  half4 res = log2(half4(0.0h));
+  half4 res = log2(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.spvasm
index 47d547b..aa2534c2 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_776088 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Log2 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Log2 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %log2_776088
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log2_776088
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %log2_776088
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log2_776088
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %log2_776088
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log2_776088
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.wgsl
index 87971b4..252f507 100644
--- a/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log2/776088.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_776088() {
-  var res : vec4<f16> = log2(vec4<f16>(f16()));
+  var res : vec4<f16> = log2(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl
index 669e8ca..c330372 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(f16) -> f16
 fn log2_8c10b3() {
-  var res: f16 = log2(f16());
+  var res: f16 = log2(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.dxc.hlsl
index 9edb6af..6049929 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_8c10b3() {
-  float16_t res = log2(float16_t(0.0h));
+  float16_t res = log2(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.glsl
index 7b9deb9..92d34db 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_8c10b3() {
-  float16_t res = log2(0.0hf);
+  float16_t res = log2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log2_8c10b3() {
-  float16_t res = log2(0.0hf);
+  float16_t res = log2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_8c10b3() {
-  float16_t res = log2(0.0hf);
+  float16_t res = log2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.msl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.msl
index 0ea021a..55342a8 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_8c10b3() {
-  half res = log2(0.0h);
+  half res = log2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.spvasm
index f269f68..121842e 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_8c10b3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Log2 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Log2 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %log2_8c10b3
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %log2_8c10b3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %log2_8c10b3
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %log2_8c10b3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log2_8c10b3
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %log2_8c10b3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.wgsl
index 6de59ec..f92de71 100644
--- a/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log2/8c10b3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_8c10b3() {
-  var res : f16 = log2(f16());
+  var res : f16 = log2(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl
index 9f7c93a..09b40fd 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(vec<2, f16>) -> vec<2, f16>
 fn log2_fb9f0b() {
-  var res: vec2<f16> = log2(vec2<f16>(f16()));
+  var res: vec2<f16> = log2(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.dxc.hlsl
index 1614719..86a9e68 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_fb9f0b() {
-  vector<float16_t, 2> res = log2((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = log2((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.glsl
index 73abe1d..b768f1b 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_fb9f0b() {
-  f16vec2 res = log2(f16vec2(0.0hf));
+  f16vec2 res = log2(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void log2_fb9f0b() {
-  f16vec2 res = log2(f16vec2(0.0hf));
+  f16vec2 res = log2(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_fb9f0b() {
-  f16vec2 res = log2(f16vec2(0.0hf));
+  f16vec2 res = log2(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.msl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.msl
index 0532f4d..bd5984f 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_fb9f0b() {
-  half2 res = log2(half2(0.0h));
+  half2 res = log2(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.spvasm
index 2dfd8bd..f68a857 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_fb9f0b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Log2 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Log2 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %log2_fb9f0b
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log2_fb9f0b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %log2_fb9f0b
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log2_fb9f0b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %log2_fb9f0b
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log2_fb9f0b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.wgsl
index 4fdced8..1967a3f 100644
--- a/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/log2/fb9f0b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_fb9f0b() {
-  var res : vec2<f16> = log2(vec2<f16>(f16()));
+  var res : vec2<f16> = log2(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl b/test/tint/builtins/gen/literal/max/111ac0.wgsl
index 1a46cb5..6166980 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl
@@ -25,7 +25,7 @@
 
 // fn max(f16, f16) -> f16
 fn max_111ac0() {
-  var res: f16 = max(f16(), f16());
+  var res: f16 = max(1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.dxc.hlsl
index 972d568..c9db3e2 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void max_111ac0() {
-  float16_t res = max(float16_t(0.0h), float16_t(0.0h));
+  float16_t res = max(float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.glsl b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.glsl
index b0864de..943c60f 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_111ac0() {
-  float16_t res = max(0.0hf, 0.0hf);
+  float16_t res = max(1.0hf, 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void max_111ac0() {
-  float16_t res = max(0.0hf, 0.0hf);
+  float16_t res = max(1.0hf, 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_111ac0() {
-  float16_t res = max(0.0hf, 0.0hf);
+  float16_t res = max(1.0hf, 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.msl b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.msl
index ccbcac5..69dd931 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void max_111ac0() {
-  half res = fmax(0.0h, 0.0h);
+  half res = fmax(1.0h, 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.spvasm
index b3c0805..e04ad04 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_111ac0 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 NMax %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 NMax %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %max_111ac0
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %max_111ac0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %max_111ac0
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %max_111ac0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %max_111ac0
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %max_111ac0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.wgsl
index 86e79dd..831d7f5 100644
--- a/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/max/111ac0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn max_111ac0() {
-  var res : f16 = max(f16(), f16());
+  var res : f16 = max(1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl b/test/tint/builtins/gen/literal/max/34956e.wgsl
index 2b22a89..39bbadc 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl
@@ -25,7 +25,7 @@
 
 // fn max(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn max_34956e() {
-  var res: vec2<f16> = max(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = max(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.dxc.hlsl
index 5ecb9bd..dd144b0 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void max_34956e() {
-  vector<float16_t, 2> res = max((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = max((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.glsl
index c9fb73c..0679c18 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_34956e() {
-  f16vec2 res = max(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = max(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void max_34956e() {
-  f16vec2 res = max(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = max(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_34956e() {
-  f16vec2 res = max(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = max(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.msl b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.msl
index 4f65540..17fec33 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void max_34956e() {
-  half2 res = fmax(half2(0.0h), half2(0.0h));
+  half2 res = fmax(half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.spvasm
index e8003c2..deeb7ae 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_34956e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 NMax %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 NMax %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %max_34956e
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %max_34956e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %max_34956e
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %max_34956e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %max_34956e
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %max_34956e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.wgsl
index 45ee030..59c80c2 100644
--- a/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/max/34956e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn max_34956e() {
-  var res : vec2<f16> = max(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = max(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl b/test/tint/builtins/gen/literal/max/445169.wgsl
index 8752c1e..50d4b67 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl
@@ -25,7 +25,7 @@
 
 // fn max(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn max_445169() {
-  var res: vec3<f16> = max(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = max(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.dxc.hlsl
index a291c4c..98fa00e 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void max_445169() {
-  vector<float16_t, 3> res = max((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = max((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.glsl b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.glsl
index dd8ccdf..6afef2a 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_445169() {
-  f16vec3 res = max(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = max(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void max_445169() {
-  f16vec3 res = max(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = max(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_445169() {
-  f16vec3 res = max(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = max(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.msl b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.msl
index 5bd10e9..af560e2 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void max_445169() {
-  half3 res = fmax(half3(0.0h), half3(0.0h));
+  half3 res = fmax(half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.spvasm
index 3e1a6af..71ed2c5 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_445169 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 NMax %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 NMax %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %max_445169
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %max_445169
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %max_445169
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %max_445169
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %max_445169
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %max_445169
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.wgsl
index 4e1c567..738ca7d 100644
--- a/test/tint/builtins/gen/literal/max/445169.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/max/445169.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn max_445169() {
-  var res : vec3<f16> = max(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = max(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl
index fd8638a..f5ef502 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl
@@ -25,7 +25,7 @@
 
 // fn max(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn max_e14f2b() {
-  var res: vec4<f16> = max(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = max(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.dxc.hlsl
index 5f79027..fe6838d 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void max_e14f2b() {
-  vector<float16_t, 4> res = max((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = max((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.glsl
index f4f78bb..6c09089 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_e14f2b() {
-  f16vec4 res = max(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = max(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void max_e14f2b() {
-  f16vec4 res = max(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = max(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_e14f2b() {
-  f16vec4 res = max(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = max(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.msl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.msl
index 3620c05..549bcd9 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void max_e14f2b() {
-  half4 res = fmax(half4(0.0h), half4(0.0h));
+  half4 res = fmax(half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.spvasm
index 6198104..704cc68 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_e14f2b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 NMax %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 NMax %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %max_e14f2b
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %max_e14f2b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %max_e14f2b
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %max_e14f2b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %max_e14f2b
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %max_e14f2b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.wgsl
index e0d214c..c15e410 100644
--- a/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/max/e14f2b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn max_e14f2b() {
-  var res : vec4<f16> = max(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = max(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl b/test/tint/builtins/gen/literal/min/7c710a.wgsl
index f8cf0d3..4b6d299 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl
@@ -25,7 +25,7 @@
 
 // fn min(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn min_7c710a() {
-  var res: vec4<f16> = min(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = min(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.dxc.hlsl
index b065ca8..691e844 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void min_7c710a() {
-  vector<float16_t, 4> res = min((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = min((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.glsl
index f794845..f6a2b3f 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_7c710a() {
-  f16vec4 res = min(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = min(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void min_7c710a() {
-  f16vec4 res = min(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = min(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_7c710a() {
-  f16vec4 res = min(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = min(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.msl b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.msl
index 7805826..37a0096 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void min_7c710a() {
-  half4 res = fmin(half4(0.0h), half4(0.0h));
+  half4 res = fmin(half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.spvasm
index 60cd2d2..d696b24 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_7c710a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 NMin %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 NMin %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %min_7c710a
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %min_7c710a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %min_7c710a
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %min_7c710a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %min_7c710a
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %min_7c710a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.wgsl
index ee18161..adefdcf 100644
--- a/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/min/7c710a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn min_7c710a() {
-  var res : vec4<f16> = min(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = min(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl
index 568017c..767c17e 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl
@@ -25,7 +25,7 @@
 
 // fn min(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn min_ab0acd() {
-  var res: vec3<f16> = min(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = min(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.dxc.hlsl
index 839e6b7..dbc2823 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void min_ab0acd() {
-  vector<float16_t, 3> res = min((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = min((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.glsl
index bc985d7..7924ccd 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ab0acd() {
-  f16vec3 res = min(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = min(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void min_ab0acd() {
-  f16vec3 res = min(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = min(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ab0acd() {
-  f16vec3 res = min(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = min(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.msl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.msl
index cbac2a3..5093e84 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void min_ab0acd() {
-  half3 res = fmin(half3(0.0h), half3(0.0h));
+  half3 res = fmin(half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.spvasm
index 42feca5..59059f1 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_ab0acd = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 NMin %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 NMin %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %min_ab0acd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %min_ab0acd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %min_ab0acd
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %min_ab0acd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %min_ab0acd
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %min_ab0acd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.wgsl
index 01c09ea..2ad7141 100644
--- a/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/min/ab0acd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn min_ab0acd() {
-  var res : vec3<f16> = min(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = min(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl
index 4222ad4..e56adbe 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl
@@ -25,7 +25,7 @@
 
 // fn min(f16, f16) -> f16
 fn min_ac84d6() {
-  var res: f16 = min(f16(), f16());
+  var res: f16 = min(1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.dxc.hlsl
index 3d05db9..e32d65a 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void min_ac84d6() {
-  float16_t res = min(float16_t(0.0h), float16_t(0.0h));
+  float16_t res = min(float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.glsl
index b79ac60..51fea2f 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ac84d6() {
-  float16_t res = min(0.0hf, 0.0hf);
+  float16_t res = min(1.0hf, 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void min_ac84d6() {
-  float16_t res = min(0.0hf, 0.0hf);
+  float16_t res = min(1.0hf, 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ac84d6() {
-  float16_t res = min(0.0hf, 0.0hf);
+  float16_t res = min(1.0hf, 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.msl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.msl
index d267417..f14256e 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void min_ac84d6() {
-  half res = fmin(0.0h, 0.0h);
+  half res = fmin(1.0h, 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.spvasm
index e76e5c3..a951b59 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_ac84d6 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 NMin %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 NMin %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %min_ac84d6
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %min_ac84d6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %min_ac84d6
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %min_ac84d6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %min_ac84d6
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %min_ac84d6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.wgsl
index 9e33bab..317af36 100644
--- a/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/min/ac84d6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn min_ac84d6() {
-  var res : f16 = min(f16(), f16());
+  var res : f16 = min(1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl b/test/tint/builtins/gen/literal/min/e780f9.wgsl
index b769097..0b6c927 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl
@@ -25,7 +25,7 @@
 
 // fn min(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn min_e780f9() {
-  var res: vec2<f16> = min(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = min(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.dxc.hlsl
index f9c75ce..4698c10 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void min_e780f9() {
-  vector<float16_t, 2> res = min((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = min((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.glsl
index 85e7175..0fadb10 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_e780f9() {
-  f16vec2 res = min(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = min(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void min_e780f9() {
-  f16vec2 res = min(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = min(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_e780f9() {
-  f16vec2 res = min(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = min(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.msl b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.msl
index 675ed30..6cfd466 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void min_e780f9() {
-  half2 res = fmin(half2(0.0h), half2(0.0h));
+  half2 res = fmin(half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.spvasm
index 45dd579..e004d7d 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_e780f9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 NMin %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 NMin %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %min_e780f9
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %min_e780f9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %min_e780f9
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %min_e780f9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %min_e780f9
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %min_e780f9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.wgsl
index 6da42f2..4b146a5 100644
--- a/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/min/e780f9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn min_e780f9() {
-  var res : vec2<f16> = min(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = min(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl
index 66ba786..336f36d 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(f16, f16, f16) -> f16
 fn mix_38cbbb() {
-  var res: f16 = mix(f16(), f16(), f16());
+  var res: f16 = mix(1.h, 1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.dxc.hlsl
index f658161..fe8cb23 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_38cbbb() {
-  float16_t res = lerp(float16_t(0.0h), float16_t(0.0h), float16_t(0.0h));
+  float16_t res = lerp(float16_t(1.0h), float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.glsl
index 51e98af..b2c39b0 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_38cbbb() {
-  float16_t res = mix(0.0hf, 0.0hf, 0.0hf);
+  float16_t res = mix(1.0hf, 1.0hf, 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_38cbbb() {
-  float16_t res = mix(0.0hf, 0.0hf, 0.0hf);
+  float16_t res = mix(1.0hf, 1.0hf, 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_38cbbb() {
-  float16_t res = mix(0.0hf, 0.0hf, 0.0hf);
+  float16_t res = mix(1.0hf, 1.0hf, 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.msl
index 57e66f3..877a6d1 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_38cbbb() {
-  half res = mix(0.0h, 0.0h, 0.0h);
+  half res = mix(1.0h, 1.0h, 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.spvasm
index cbd032d..e54008e 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_38cbbb = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 FMix %16 %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 FMix %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %mix_38cbbb
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %mix_38cbbb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %mix_38cbbb
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %mix_38cbbb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %mix_38cbbb
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %mix_38cbbb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.wgsl
index 383a567..b4d4b19 100644
--- a/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/38cbbb.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_38cbbb() {
-  var res : f16 = mix(f16(), f16(), f16());
+  var res : f16 = mix(1.0h, 1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl
index 73b7505..3e9338d 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn mix_63f2fd() {
-  var res: vec3<f16> = mix(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = mix(vec3<f16>(1.h), vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.dxc.hlsl
index 3729fef..038d87a 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_63f2fd() {
-  vector<float16_t, 3> res = lerp((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = lerp((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.glsl
index e51235b..0888f63 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_63f2fd() {
-  f16vec3 res = mix(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = mix(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_63f2fd() {
-  f16vec3 res = mix(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = mix(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_63f2fd() {
-  f16vec3 res = mix(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = mix(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.msl
index 8a9ca6f..4f982d4 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_63f2fd() {
-  half3 res = mix(half3(0.0h), half3(0.0h), half3(0.0h));
+  half3 res = mix(half3(1.0h), half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.spvasm
index 85d9a38..ea02f00 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_63f2fd = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 FMix %17 %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 FMix %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %mix_63f2fd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %mix_63f2fd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %mix_63f2fd
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %mix_63f2fd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_63f2fd
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %mix_63f2fd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.wgsl
index 8aa39e8..bbf29ed 100644
--- a/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/63f2fd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_63f2fd() {
-  var res : vec3<f16> = mix(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = mix(vec3<f16>(1.0h), vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl
index 3c89b03..e8a4274 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn mix_98ee3e() {
-  var res: vec2<f16> = mix(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = mix(vec2<f16>(1.h), vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.dxc.hlsl
index 2cc67ba..b069843 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_98ee3e() {
-  vector<float16_t, 2> res = lerp((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = lerp((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.glsl
index 977312c..afc4ed8 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_98ee3e() {
-  f16vec2 res = mix(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = mix(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_98ee3e() {
-  f16vec2 res = mix(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = mix(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_98ee3e() {
-  f16vec2 res = mix(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = mix(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.msl
index 4f98b7a..f7c0dab 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_98ee3e() {
-  half2 res = mix(half2(0.0h), half2(0.0h), half2(0.0h));
+  half2 res = mix(half2(1.0h), half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.spvasm
index 47c734a..6e07580 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_98ee3e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 FMix %17 %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 FMix %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %mix_98ee3e
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %mix_98ee3e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %mix_98ee3e
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %mix_98ee3e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_98ee3e
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %mix_98ee3e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.wgsl
index bb4929d..c159cdb 100644
--- a/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/98ee3e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_98ee3e() {
-  var res : vec2<f16> = mix(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = mix(vec2<f16>(1.0h), vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl
index 21231ef..5b83bcd 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(vec<3, f16>, vec<3, f16>, f16) -> vec<3, f16>
 fn mix_c1aec6() {
-  var res: vec3<f16> = mix(vec3<f16>(f16()), vec3<f16>(f16()), f16());
+  var res: vec3<f16> = mix(vec3<f16>(1.h), vec3<f16>(1.h), 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.dxc.hlsl
index 3463407..70e51cd 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_c1aec6() {
-  vector<float16_t, 3> res = lerp((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, float16_t(0.0h));
+  vector<float16_t, 3> res = lerp((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.glsl
index 8411e25..62f28cb 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_c1aec6() {
-  f16vec3 res = mix(f16vec3(0.0hf), f16vec3(0.0hf), 0.0hf);
+  f16vec3 res = mix(f16vec3(1.0hf), f16vec3(1.0hf), 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_c1aec6() {
-  f16vec3 res = mix(f16vec3(0.0hf), f16vec3(0.0hf), 0.0hf);
+  f16vec3 res = mix(f16vec3(1.0hf), f16vec3(1.0hf), 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_c1aec6() {
-  f16vec3 res = mix(f16vec3(0.0hf), f16vec3(0.0hf), 0.0hf);
+  f16vec3 res = mix(f16vec3(1.0hf), f16vec3(1.0hf), 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.msl
index a8285ba..96b23d1 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_c1aec6() {
-  half3 res = mix(half3(0.0h), half3(0.0h), 0.0h);
+  half3 res = mix(half3(1.0h), half3(1.0h), 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.spvasm
index 7b6a048..a69dc54 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,39 +37,40 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %23 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_c1aec6 = OpFunction %void None %9
          %12 = OpLabel
-         %19 = OpVariable %_ptr_Function_v3half Function %17
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %21 = OpCompositeConstruct %v3half %18 %18 %18
-         %13 = OpExtInst %v3half %16 FMix %17 %17 %21
+         %19 = OpVariable %_ptr_Function_v3half Function %21
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %22 = OpCompositeConstruct %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %13 = OpExtInst %v3half %16 FMix %18 %18 %22
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %mix_c1aec6
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %mix_c1aec6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_c1aec6
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %mix_c1aec6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %mix_c1aec6
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %mix_c1aec6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.wgsl
index 6665965..a3e11f3 100644
--- a/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/c1aec6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_c1aec6() {
-  var res : vec3<f16> = mix(vec3<f16>(f16()), vec3<f16>(f16()), f16());
+  var res : vec3<f16> = mix(vec3<f16>(1.0h), vec3<f16>(1.0h), 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl
index 6adeecb..454dc07 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(vec<2, f16>, vec<2, f16>, f16) -> vec<2, f16>
 fn mix_e46a83() {
-  var res: vec2<f16> = mix(vec2<f16>(f16()), vec2<f16>(f16()), f16());
+  var res: vec2<f16> = mix(vec2<f16>(1.h), vec2<f16>(1.h), 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.dxc.hlsl
index fa0f9c2..9869a22 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_e46a83() {
-  vector<float16_t, 2> res = lerp((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, float16_t(0.0h));
+  vector<float16_t, 2> res = lerp((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.glsl
index bae9e6d..077db7e 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_e46a83() {
-  f16vec2 res = mix(f16vec2(0.0hf), f16vec2(0.0hf), 0.0hf);
+  f16vec2 res = mix(f16vec2(1.0hf), f16vec2(1.0hf), 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_e46a83() {
-  f16vec2 res = mix(f16vec2(0.0hf), f16vec2(0.0hf), 0.0hf);
+  f16vec2 res = mix(f16vec2(1.0hf), f16vec2(1.0hf), 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_e46a83() {
-  f16vec2 res = mix(f16vec2(0.0hf), f16vec2(0.0hf), 0.0hf);
+  f16vec2 res = mix(f16vec2(1.0hf), f16vec2(1.0hf), 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.msl
index 15babbe..5cd4eea 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_e46a83() {
-  half2 res = mix(half2(0.0h), half2(0.0h), 0.0h);
+  half2 res = mix(half2(1.0h), half2(1.0h), 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.spvasm
index 8dfbb2c..48c4d38 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,39 +37,40 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %23 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_e46a83 = OpFunction %void None %9
          %12 = OpLabel
-         %19 = OpVariable %_ptr_Function_v2half Function %17
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %21 = OpCompositeConstruct %v2half %18 %18
-         %13 = OpExtInst %v2half %16 FMix %17 %17 %21
+         %19 = OpVariable %_ptr_Function_v2half Function %21
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %22 = OpCompositeConstruct %v2half %half_0x1p_0 %half_0x1p_0
+         %13 = OpExtInst %v2half %16 FMix %18 %18 %22
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %mix_e46a83
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %mix_e46a83
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_e46a83
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %mix_e46a83
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %mix_e46a83
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %mix_e46a83
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.wgsl
index 44b19f2..bc20255 100644
--- a/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/e46a83.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_e46a83() {
-  var res : vec2<f16> = mix(vec2<f16>(f16()), vec2<f16>(f16()), f16());
+  var res : vec2<f16> = mix(vec2<f16>(1.0h), vec2<f16>(1.0h), 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl
index 7bf17b5..1f93f66 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn mix_ee2468() {
-  var res: vec4<f16> = mix(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = mix(vec4<f16>(1.h), vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.dxc.hlsl
index daaa4163..d3b7179 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_ee2468() {
-  vector<float16_t, 4> res = lerp((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = lerp((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.glsl
index 16c94d2..89f0516 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_ee2468() {
-  f16vec4 res = mix(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = mix(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_ee2468() {
-  f16vec4 res = mix(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = mix(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_ee2468() {
-  f16vec4 res = mix(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = mix(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.msl
index 2eabc89..6edc032 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_ee2468() {
-  half4 res = mix(half4(0.0h), half4(0.0h), half4(0.0h));
+  half4 res = mix(half4(1.0h), half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.spvasm
index 8ff66bb..86ff608 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_ee2468 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 FMix %17 %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 FMix %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %mix_ee2468
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %mix_ee2468
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %mix_ee2468
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %mix_ee2468
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_ee2468
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %mix_ee2468
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.wgsl
index 15e8531..2e3a3b8 100644
--- a/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/ee2468.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_ee2468() {
-  var res : vec4<f16> = mix(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = mix(vec4<f16>(1.0h), vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl
index 5ff2c85..99c4e02 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl
@@ -25,7 +25,7 @@
 
 // fn mix(vec<4, f16>, vec<4, f16>, f16) -> vec<4, f16>
 fn mix_f1a543() {
-  var res: vec4<f16> = mix(vec4<f16>(f16()), vec4<f16>(f16()), f16());
+  var res: vec4<f16> = mix(vec4<f16>(1.h), vec4<f16>(1.h), 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.dxc.hlsl
index 0701d56..706583d 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void mix_f1a543() {
-  vector<float16_t, 4> res = lerp((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, float16_t(0.0h));
+  vector<float16_t, 4> res = lerp((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.glsl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.glsl
index 730990d..d3bfff0 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_f1a543() {
-  f16vec4 res = mix(f16vec4(0.0hf), f16vec4(0.0hf), 0.0hf);
+  f16vec4 res = mix(f16vec4(1.0hf), f16vec4(1.0hf), 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void mix_f1a543() {
-  f16vec4 res = mix(f16vec4(0.0hf), f16vec4(0.0hf), 0.0hf);
+  f16vec4 res = mix(f16vec4(1.0hf), f16vec4(1.0hf), 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_f1a543() {
-  f16vec4 res = mix(f16vec4(0.0hf), f16vec4(0.0hf), 0.0hf);
+  f16vec4 res = mix(f16vec4(1.0hf), f16vec4(1.0hf), 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.msl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.msl
index 823de59..6ef592f 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void mix_f1a543() {
-  half4 res = mix(half4(0.0h), half4(0.0h), 0.0h);
+  half4 res = mix(half4(1.0h), half4(1.0h), 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.spvasm
index 7f1efc5..7bbe369 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,39 +37,40 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %23 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_f1a543 = OpFunction %void None %9
          %12 = OpLabel
-         %19 = OpVariable %_ptr_Function_v4half Function %17
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %21 = OpCompositeConstruct %v4half %18 %18 %18 %18
-         %13 = OpExtInst %v4half %16 FMix %17 %17 %21
+         %19 = OpVariable %_ptr_Function_v4half Function %21
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %22 = OpCompositeConstruct %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %13 = OpExtInst %v4half %16 FMix %18 %18 %22
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %mix_f1a543
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %mix_f1a543
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_f1a543
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %mix_f1a543
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %mix_f1a543
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %mix_f1a543
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.wgsl
index c42b7da..90cd459 100644
--- a/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/mix/f1a543.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn mix_f1a543() {
-  var res : vec4<f16> = mix(vec4<f16>(f16()), vec4<f16>(f16()), f16());
+  var res : vec4<f16> = mix(vec4<f16>(1.0h), vec4<f16>(1.0h), 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl b/test/tint/builtins/gen/literal/modf/45005f.wgsl
index 236e165..fe0b656 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(vec<3, f16>) -> __modf_result_vec<3, f16>
 fn modf_45005f() {
-  var res = modf(vec3<f16>(f16()));
+  var res = modf(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.dxc.hlsl
index 30ed6b2..e4a0033 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_45005f() {
-  modf_result_vec3_f16 res = tint_modf((float16_t(0.0h)).xxx);
+  modf_result_vec3_f16 res = tint_modf((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.glsl
index c2ef9d1..d402eda 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_45005f() {
-  modf_result_vec3_f16 res = tint_modf(f16vec3(0.0hf));
+  modf_result_vec3_f16 res = tint_modf(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void modf_45005f() {
-  modf_result_vec3_f16 res = tint_modf(f16vec3(0.0hf));
+  modf_result_vec3_f16 res = tint_modf(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void modf_45005f() {
-  modf_result_vec3_f16 res = tint_modf(f16vec3(0.0hf));
+  modf_result_vec3_f16 res = tint_modf(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.msl
index b07ab06..a3071d4 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_45005f() {
-  modf_result_vec3_f16 res = tint_modf(half3(0.0h));
+  modf_result_vec3_f16 res = tint_modf(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.spvasm
index 1e06f7a..63c4bd4 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -43,37 +43,38 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
 %__modf_result_vec3_f16 = OpTypeStruct %v3half %v3half
-         %18 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %19 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function___modf_result_vec3_f16 = OpTypePointer Function %__modf_result_vec3_f16
-         %21 = OpConstantNull %__modf_result_vec3_f16
-         %22 = OpTypeFunction %v4float
+         %22 = OpConstantNull %__modf_result_vec3_f16
+         %23 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_45005f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function___modf_result_vec3_f16 Function %21
-         %13 = OpExtInst %__modf_result_vec3_f16 %17 ModfStruct %18
+        %res = OpVariable %_ptr_Function___modf_result_vec3_f16 Function %22
+         %13 = OpExtInst %__modf_result_vec3_f16 %17 ModfStruct %19
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %modf_45005f
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %modf_45005f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %28 = OpLabel
+         %29 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %29
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_45005f
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %modf_45005f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_45005f
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %modf_45005f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.wgsl
index 57f4b3b..43f497e 100644
--- a/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/45005f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_45005f() {
-  var res = modf(vec3<f16>(f16()));
+  var res = modf(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl
index 71e2638..591a299 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(f16) -> __modf_result<f16>
 fn modf_8dbbbf() {
-  var res = modf(f16());
+  var res = modf(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.dxc.hlsl
index 802fe2a..c84d408 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_8dbbbf() {
-  modf_result_f16 res = tint_modf(float16_t(0.0h));
+  modf_result_f16 res = tint_modf(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.glsl
index f949198..f9757b9 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_8dbbbf() {
-  modf_result_f16 res = tint_modf(0.0hf);
+  modf_result_f16 res = tint_modf(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void modf_8dbbbf() {
-  modf_result_f16 res = tint_modf(0.0hf);
+  modf_result_f16 res = tint_modf(1.0hf);
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void modf_8dbbbf() {
-  modf_result_f16 res = tint_modf(0.0hf);
+  modf_result_f16 res = tint_modf(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.msl
index f0a8d58..e9472e7 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_8dbbbf() {
-  modf_result_f16 res = tint_modf(0.0h);
+  modf_result_f16 res = tint_modf(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.spvasm
index 53162e3..ebb1132 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.spvasm
@@ -42,7 +42,7 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
 %__modf_result_f16 = OpTypeStruct %half %half
-         %17 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function___modf_result_f16 = OpTypePointer Function %__modf_result_f16
          %20 = OpConstantNull %__modf_result_f16
          %21 = OpTypeFunction %v4float
@@ -50,7 +50,7 @@
 %modf_8dbbbf = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function___modf_result_f16 Function %20
-         %13 = OpExtInst %__modf_result_f16 %16 ModfStruct %17
+         %13 = OpExtInst %__modf_result_f16 %16 ModfStruct %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.wgsl
index 2ab39a6..c3619a7 100644
--- a/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/8dbbbf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_8dbbbf() {
-  var res = modf(f16());
+  var res = modf(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl b/test/tint/builtins/gen/literal/modf/995934.wgsl
index ef2c6ae..bcb6006 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(vec<4, f16>) -> __modf_result_vec<4, f16>
 fn modf_995934() {
-  var res = modf(vec4<f16>(f16()));
+  var res = modf(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.dxc.hlsl
index d1b1051..24c71de 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_995934() {
-  modf_result_vec4_f16 res = tint_modf((float16_t(0.0h)).xxxx);
+  modf_result_vec4_f16 res = tint_modf((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.glsl
index f3e71cb..065a9e7 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_995934() {
-  modf_result_vec4_f16 res = tint_modf(f16vec4(0.0hf));
+  modf_result_vec4_f16 res = tint_modf(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void modf_995934() {
-  modf_result_vec4_f16 res = tint_modf(f16vec4(0.0hf));
+  modf_result_vec4_f16 res = tint_modf(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void modf_995934() {
-  modf_result_vec4_f16 res = tint_modf(f16vec4(0.0hf));
+  modf_result_vec4_f16 res = tint_modf(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.msl
index 93df00a..76d3c04 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_995934() {
-  modf_result_vec4_f16 res = tint_modf(half4(0.0h));
+  modf_result_vec4_f16 res = tint_modf(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.spvasm
index 6fa7c2f..b19f599 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -43,37 +43,38 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
 %__modf_result_vec4_f16 = OpTypeStruct %v4half %v4half
-         %18 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %19 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function___modf_result_vec4_f16 = OpTypePointer Function %__modf_result_vec4_f16
-         %21 = OpConstantNull %__modf_result_vec4_f16
-         %22 = OpTypeFunction %v4float
+         %22 = OpConstantNull %__modf_result_vec4_f16
+         %23 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_995934 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function___modf_result_vec4_f16 Function %21
-         %13 = OpExtInst %__modf_result_vec4_f16 %17 ModfStruct %18
+        %res = OpVariable %_ptr_Function___modf_result_vec4_f16 Function %22
+         %13 = OpExtInst %__modf_result_vec4_f16 %17 ModfStruct %19
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %modf_995934
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %modf_995934
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %28 = OpLabel
+         %29 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %29
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_995934
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %modf_995934
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_995934
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %modf_995934
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.wgsl
index 1568993..a73275d 100644
--- a/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/995934.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_995934() {
-  var res = modf(vec4<f16>(f16()));
+  var res = modf(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl b/test/tint/builtins/gen/literal/modf/a545b9.wgsl
index 5b3d8b5..1a66aad 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(vec<2, f16>) -> __modf_result_vec<2, f16>
 fn modf_a545b9() {
-  var res = modf(vec2<f16>(f16()));
+  var res = modf(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.dxc.hlsl
index d146291..1805568 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_a545b9() {
-  modf_result_vec2_f16 res = tint_modf((float16_t(0.0h)).xx);
+  modf_result_vec2_f16 res = tint_modf((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.glsl
index 9a4b37a..7c2f892 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_a545b9() {
-  modf_result_vec2_f16 res = tint_modf(f16vec2(0.0hf));
+  modf_result_vec2_f16 res = tint_modf(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -47,7 +47,7 @@
 
 
 void modf_a545b9() {
-  modf_result_vec2_f16 res = tint_modf(f16vec2(0.0hf));
+  modf_result_vec2_f16 res = tint_modf(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -74,7 +74,7 @@
 
 
 void modf_a545b9() {
-  modf_result_vec2_f16 res = tint_modf(f16vec2(0.0hf));
+  modf_result_vec2_f16 res = tint_modf(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.msl b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.msl
index a9f218a..d7ce71e 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_a545b9() {
-  modf_result_vec2_f16 res = tint_modf(half2(0.0h));
+  modf_result_vec2_f16 res = tint_modf(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.spvasm
index a47a138..63d3be1 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -43,37 +43,38 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
 %__modf_result_vec2_f16 = OpTypeStruct %v2half %v2half
-         %18 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %19 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function___modf_result_vec2_f16 = OpTypePointer Function %__modf_result_vec2_f16
-         %21 = OpConstantNull %__modf_result_vec2_f16
-         %22 = OpTypeFunction %v4float
+         %22 = OpConstantNull %__modf_result_vec2_f16
+         %23 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_a545b9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function___modf_result_vec2_f16 Function %21
-         %13 = OpExtInst %__modf_result_vec2_f16 %17 ModfStruct %18
+        %res = OpVariable %_ptr_Function___modf_result_vec2_f16 Function %22
+         %13 = OpExtInst %__modf_result_vec2_f16 %17 ModfStruct %19
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %modf_a545b9
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %modf_a545b9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %28 = OpLabel
+         %29 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %29
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %modf_a545b9
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %modf_a545b9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_a545b9
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %modf_a545b9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.wgsl
index 177b0e9..9d2b453 100644
--- a/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/modf/a545b9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_a545b9() {
-  var res = modf(vec2<f16>(f16()));
+  var res = modf(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl
index 3c612c6..7e2eb67 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl
@@ -25,7 +25,7 @@
 
 // fn normalize(vec<3, f16>) -> vec<3, f16>
 fn normalize_39d5ec() {
-  var res: vec3<f16> = normalize(vec3<f16>(f16()));
+  var res: vec3<f16> = normalize(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.dxc.hlsl
index 4ad650f..517a86a 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void normalize_39d5ec() {
-  vector<float16_t, 3> res = normalize((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = normalize((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.glsl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.glsl
index e129ddc..70d93b7 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_39d5ec() {
-  f16vec3 res = normalize(f16vec3(0.0hf));
+  f16vec3 res = normalize(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void normalize_39d5ec() {
-  f16vec3 res = normalize(f16vec3(0.0hf));
+  f16vec3 res = normalize(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_39d5ec() {
-  f16vec3 res = normalize(f16vec3(0.0hf));
+  f16vec3 res = normalize(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.msl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.msl
index 683a2ad..42dca1d 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void normalize_39d5ec() {
-  half3 res = normalize(half3(0.0h));
+  half3 res = normalize(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.spvasm
index 7f52307..0c7ec62 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %normalize_39d5ec = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Normalize %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Normalize %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %normalize_39d5ec
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %normalize_39d5ec
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %normalize_39d5ec
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %normalize_39d5ec
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %normalize_39d5ec
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %normalize_39d5ec
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.wgsl
index f8f2e8f..27eaacd 100644
--- a/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/normalize/39d5ec.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn normalize_39d5ec() {
-  var res : vec3<f16> = normalize(vec3<f16>(f16()));
+  var res : vec3<f16> = normalize(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl
index 8b3c478..5dcb17c 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl
@@ -25,7 +25,7 @@
 
 // fn normalize(vec<2, f16>) -> vec<2, f16>
 fn normalize_7990f3() {
-  var res: vec2<f16> = normalize(vec2<f16>(f16()));
+  var res: vec2<f16> = normalize(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.dxc.hlsl
index b0e04e1..ee11b6f 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void normalize_7990f3() {
-  vector<float16_t, 2> res = normalize((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = normalize((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.glsl
index f59eb6d..4546245 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_7990f3() {
-  f16vec2 res = normalize(f16vec2(0.0hf));
+  f16vec2 res = normalize(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void normalize_7990f3() {
-  f16vec2 res = normalize(f16vec2(0.0hf));
+  f16vec2 res = normalize(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_7990f3() {
-  f16vec2 res = normalize(f16vec2(0.0hf));
+  f16vec2 res = normalize(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.msl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.msl
index bea065f..1a691aa 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void normalize_7990f3() {
-  half2 res = normalize(half2(0.0h));
+  half2 res = normalize(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.spvasm
index d00d9f3..d38b1e8 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %normalize_7990f3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Normalize %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Normalize %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %normalize_7990f3
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %normalize_7990f3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %normalize_7990f3
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %normalize_7990f3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %normalize_7990f3
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %normalize_7990f3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.wgsl
index ce0b29f..996f7d3 100644
--- a/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/normalize/7990f3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn normalize_7990f3() {
-  var res : vec2<f16> = normalize(vec2<f16>(f16()));
+  var res : vec2<f16> = normalize(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl
index 81f49c1..6b73d2f 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl
@@ -25,7 +25,7 @@
 
 // fn normalize(vec<4, f16>) -> vec<4, f16>
 fn normalize_b8cb8d() {
-  var res: vec4<f16> = normalize(vec4<f16>(f16()));
+  var res: vec4<f16> = normalize(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.dxc.hlsl
index 24ac211..df8561e 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void normalize_b8cb8d() {
-  vector<float16_t, 4> res = normalize((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = normalize((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.glsl
index 897b4f9..727d29a 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_b8cb8d() {
-  f16vec4 res = normalize(f16vec4(0.0hf));
+  f16vec4 res = normalize(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void normalize_b8cb8d() {
-  f16vec4 res = normalize(f16vec4(0.0hf));
+  f16vec4 res = normalize(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_b8cb8d() {
-  f16vec4 res = normalize(f16vec4(0.0hf));
+  f16vec4 res = normalize(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.msl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.msl
index 4481b97..ddeaa45 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void normalize_b8cb8d() {
-  half4 res = normalize(half4(0.0h));
+  half4 res = normalize(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.spvasm
index ce722dba..7b84f9b 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %normalize_b8cb8d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Normalize %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Normalize %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %normalize_b8cb8d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %normalize_b8cb8d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %normalize_b8cb8d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %normalize_b8cb8d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %normalize_b8cb8d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %normalize_b8cb8d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.wgsl
index 0721427..2549e2b 100644
--- a/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/normalize/b8cb8d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn normalize_b8cb8d() {
-  var res : vec4<f16> = normalize(vec4<f16>(f16()));
+  var res : vec4<f16> = normalize(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl
index 58ab00c..b6306ef 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl
@@ -25,7 +25,7 @@
 
 // fn pow(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn pow_4f33b2() {
-  var res: vec4<f16> = pow(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = pow(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.dxc.hlsl
index 2804058..279bbac 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void pow_4f33b2() {
-  vector<float16_t, 4> res = pow((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = pow((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.glsl
index cec05e4..2a31c91 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_4f33b2() {
-  f16vec4 res = pow(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = pow(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void pow_4f33b2() {
-  f16vec4 res = pow(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = pow(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_4f33b2() {
-  f16vec4 res = pow(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = pow(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.msl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.msl
index abc7e9e..8f249be 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pow_4f33b2() {
-  half4 res = pow(half4(0.0h), half4(0.0h));
+  half4 res = pow(half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.spvasm
index 669759d..be0a42a 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_4f33b2 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Pow %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Pow %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %pow_4f33b2
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %pow_4f33b2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %pow_4f33b2
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %pow_4f33b2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %pow_4f33b2
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %pow_4f33b2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.wgsl
index bb9db59..241f554 100644
--- a/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/pow/4f33b2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn pow_4f33b2() {
-  var res : vec4<f16> = pow(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = pow(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl
index c9a6522..b2c268d 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl
@@ -25,7 +25,7 @@
 
 // fn pow(f16, f16) -> f16
 fn pow_ce9ef5() {
-  var res: f16 = pow(f16(), f16());
+  var res: f16 = pow(1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.dxc.hlsl
index 1f9e712..b2a002c 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void pow_ce9ef5() {
-  float16_t res = pow(float16_t(0.0h), float16_t(0.0h));
+  float16_t res = pow(float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.glsl
index 23f08db..3363c82 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_ce9ef5() {
-  float16_t res = pow(0.0hf, 0.0hf);
+  float16_t res = pow(1.0hf, 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void pow_ce9ef5() {
-  float16_t res = pow(0.0hf, 0.0hf);
+  float16_t res = pow(1.0hf, 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_ce9ef5() {
-  float16_t res = pow(0.0hf, 0.0hf);
+  float16_t res = pow(1.0hf, 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.msl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.msl
index 9346414..45bbe91 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pow_ce9ef5() {
-  half res = pow(0.0h, 0.0h);
+  half res = pow(1.0h, 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.spvasm
index 219cfcf..67c7240 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_ce9ef5 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Pow %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Pow %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %pow_ce9ef5
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %pow_ce9ef5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %pow_ce9ef5
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %pow_ce9ef5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %pow_ce9ef5
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %pow_ce9ef5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.wgsl
index dc2c9c4..ba7dac9 100644
--- a/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/pow/ce9ef5.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn pow_ce9ef5() {
-  var res : f16 = pow(f16(), f16());
+  var res : f16 = pow(1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl
index b63e93e..9a19834 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl
@@ -25,7 +25,7 @@
 
 // fn pow(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn pow_f37b25() {
-  var res: vec2<f16> = pow(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = pow(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.dxc.hlsl
index 8efda2b..6a13f47 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void pow_f37b25() {
-  vector<float16_t, 2> res = pow((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = pow((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.glsl
index ac933cb..c49c6cc 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_f37b25() {
-  f16vec2 res = pow(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = pow(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void pow_f37b25() {
-  f16vec2 res = pow(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = pow(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_f37b25() {
-  f16vec2 res = pow(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = pow(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.msl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.msl
index 3962dd1..f2862ed 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pow_f37b25() {
-  half2 res = pow(half2(0.0h), half2(0.0h));
+  half2 res = pow(half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.spvasm
index 53e3689..88e21b6 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_f37b25 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Pow %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Pow %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %pow_f37b25
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %pow_f37b25
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %pow_f37b25
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %pow_f37b25
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %pow_f37b25
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %pow_f37b25
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.wgsl
index 96ff2a2..4ab482e 100644
--- a/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/pow/f37b25.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn pow_f37b25() {
-  var res : vec2<f16> = pow(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = pow(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl
index 51ecff3..8e718c8 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl
@@ -25,7 +25,7 @@
 
 // fn pow(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn pow_fa5429() {
-  var res: vec3<f16> = pow(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = pow(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.dxc.hlsl
index fc999c6..a7106e4 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void pow_fa5429() {
-  vector<float16_t, 3> res = pow((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = pow((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.glsl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.glsl
index 113b3ab..289c6e6 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_fa5429() {
-  f16vec3 res = pow(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = pow(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void pow_fa5429() {
-  f16vec3 res = pow(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = pow(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_fa5429() {
-  f16vec3 res = pow(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = pow(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.msl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.msl
index 249c3f3..220abc4 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void pow_fa5429() {
-  half3 res = pow(half3(0.0h), half3(0.0h));
+  half3 res = pow(half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.spvasm
index bc20475..68917f8 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_fa5429 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Pow %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Pow %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %pow_fa5429
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %pow_fa5429
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %pow_fa5429
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %pow_fa5429
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %pow_fa5429
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %pow_fa5429
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.wgsl
index 46002ea..703d869 100644
--- a/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/pow/fa5429.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn pow_fa5429() {
-  var res : vec3<f16> = pow(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = pow(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl
index c60793b..a9c61e5 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(f16) -> f16
 fn radians_208fd9() {
-  var res: f16 = radians(f16());
+  var res: f16 = radians(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.dxc.hlsl
index b7b76cd..fb9a879 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_208fd9() {
-  float16_t res = tint_radians(float16_t(0.0h));
+  float16_t res = tint_radians(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.glsl
index cf4c962..a48668c 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_208fd9() {
-  float16_t res = tint_radians(0.0hf);
+  float16_t res = tint_radians(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void radians_208fd9() {
-  float16_t res = tint_radians(0.0hf);
+  float16_t res = tint_radians(1.0hf);
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void radians_208fd9() {
-  float16_t res = tint_radians(0.0hf);
+  float16_t res = tint_radians(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.msl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.msl
index d12b406..72d93d6 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_208fd9() {
-  half res = tint_radians(0.0h);
+  half res = tint_radians(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.spvasm
index 8fc9e39..e218859 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_208fd9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Radians %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Radians %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %radians_208fd9
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %radians_208fd9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %radians_208fd9
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %radians_208fd9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %radians_208fd9
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %radians_208fd9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.wgsl
index 1febb6e..24a3c0d 100644
--- a/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/radians/208fd9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_208fd9() {
-  var res : f16 = radians(f16());
+  var res : f16 = radians(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl
index a7887fb..b72488c 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(vec<4, f16>) -> vec<4, f16>
 fn radians_44f20b() {
-  var res: vec4<f16> = radians(vec4<f16>(f16()));
+  var res: vec4<f16> = radians(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.dxc.hlsl
index 6c3cce9..3c88857 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_44f20b() {
-  vector<float16_t, 4> res = tint_radians((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = tint_radians((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.glsl
index 2b3d4c7..caa4ab8 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_44f20b() {
-  f16vec4 res = tint_radians(f16vec4(0.0hf));
+  f16vec4 res = tint_radians(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void radians_44f20b() {
-  f16vec4 res = tint_radians(f16vec4(0.0hf));
+  f16vec4 res = tint_radians(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void radians_44f20b() {
-  f16vec4 res = tint_radians(f16vec4(0.0hf));
+  f16vec4 res = tint_radians(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.msl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.msl
index 1e20066..0f7b12f 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_44f20b() {
-  half4 res = tint_radians(half4(0.0h));
+  half4 res = tint_radians(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.spvasm
index 6321aaa..993e544 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_44f20b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Radians %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Radians %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %radians_44f20b
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %radians_44f20b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %radians_44f20b
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %radians_44f20b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %radians_44f20b
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %radians_44f20b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.wgsl
index 35170cc..1f1f177 100644
--- a/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/radians/44f20b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_44f20b() {
-  var res : vec4<f16> = radians(vec4<f16>(f16()));
+  var res : vec4<f16> = radians(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl
index 4e2a23c..dfe0486 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(vec<3, f16>) -> vec<3, f16>
 fn radians_7ea4c7() {
-  var res: vec3<f16> = radians(vec3<f16>(f16()));
+  var res: vec3<f16> = radians(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.dxc.hlsl
index a9f6f96..72427f3 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_7ea4c7() {
-  vector<float16_t, 3> res = tint_radians((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = tint_radians((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.glsl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.glsl
index a8cc9ab..75c124c 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_7ea4c7() {
-  f16vec3 res = tint_radians(f16vec3(0.0hf));
+  f16vec3 res = tint_radians(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void radians_7ea4c7() {
-  f16vec3 res = tint_radians(f16vec3(0.0hf));
+  f16vec3 res = tint_radians(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void radians_7ea4c7() {
-  f16vec3 res = tint_radians(f16vec3(0.0hf));
+  f16vec3 res = tint_radians(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.msl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.msl
index 34ca856..a8f0e1f 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_7ea4c7() {
-  half3 res = tint_radians(half3(0.0h));
+  half3 res = tint_radians(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.spvasm
index 9ef7401..3253f44 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_7ea4c7 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Radians %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Radians %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %radians_7ea4c7
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %radians_7ea4c7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %radians_7ea4c7
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %radians_7ea4c7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %radians_7ea4c7
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %radians_7ea4c7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.wgsl
index 56b01aa..094dfb7 100644
--- a/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/radians/7ea4c7.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_7ea4c7() {
-  var res : vec3<f16> = radians(vec3<f16>(f16()));
+  var res : vec3<f16> = radians(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl
index f3d4acb..6b45a23 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(vec<2, f16>) -> vec<2, f16>
 fn radians_fbacf0() {
-  var res: vec2<f16> = radians(vec2<f16>(f16()));
+  var res: vec2<f16> = radians(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.dxc.hlsl
index 8d3e076..77ad4e4 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_fbacf0() {
-  vector<float16_t, 2> res = tint_radians((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = tint_radians((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.glsl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.glsl
index ce24c39..2d748f9 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_fbacf0() {
-  f16vec2 res = tint_radians(f16vec2(0.0hf));
+  f16vec2 res = tint_radians(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -33,7 +33,7 @@
 
 
 void radians_fbacf0() {
-  f16vec2 res = tint_radians(f16vec2(0.0hf));
+  f16vec2 res = tint_radians(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 
 void radians_fbacf0() {
-  f16vec2 res = tint_radians(f16vec2(0.0hf));
+  f16vec2 res = tint_radians(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.msl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.msl
index 9359855..ca066a6 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_fbacf0() {
-  half2 res = tint_radians(half2(0.0h));
+  half2 res = tint_radians(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.spvasm
index f798f51..3fe420d 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_fbacf0 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Radians %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Radians %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %radians_fbacf0
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %radians_fbacf0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %radians_fbacf0
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %radians_fbacf0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %radians_fbacf0
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %radians_fbacf0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.wgsl
index 0aba9cc..061f0a0 100644
--- a/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/radians/fbacf0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_fbacf0() {
-  var res : vec2<f16> = radians(vec2<f16>(f16()));
+  var res : vec2<f16> = radians(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl
index 9d8a01b..03673f7 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl
@@ -25,7 +25,7 @@
 
 // fn reflect(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn reflect_310de5() {
-  var res: vec4<f16> = reflect(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = reflect(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.dxc.hlsl
index 4a7f8f4..df49cea 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void reflect_310de5() {
-  vector<float16_t, 4> res = reflect((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = reflect((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.glsl
index 92a222f..278aae3 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_310de5() {
-  f16vec4 res = reflect(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = reflect(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void reflect_310de5() {
-  f16vec4 res = reflect(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = reflect(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_310de5() {
-  f16vec4 res = reflect(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = reflect(f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.msl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.msl
index 774dfb7..cea7ea6 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void reflect_310de5() {
-  half4 res = reflect(half4(0.0h), half4(0.0h));
+  half4 res = reflect(half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.spvasm
index e77a355..bc8cf64 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %reflect_310de5 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Reflect %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Reflect %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %reflect_310de5
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %reflect_310de5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %reflect_310de5
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %reflect_310de5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %reflect_310de5
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %reflect_310de5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.wgsl
index 61a2100..a726a49 100644
--- a/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/reflect/310de5.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn reflect_310de5() {
-  var res : vec4<f16> = reflect(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = reflect(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl
index 85df287..097b214 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl
@@ -25,7 +25,7 @@
 
 // fn reflect(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn reflect_61ca21() {
-  var res: vec3<f16> = reflect(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = reflect(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.dxc.hlsl
index 5a2f305..f5e64c6 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void reflect_61ca21() {
-  vector<float16_t, 3> res = reflect((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = reflect((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.glsl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.glsl
index c3b3b78..c797b56 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_61ca21() {
-  f16vec3 res = reflect(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = reflect(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void reflect_61ca21() {
-  f16vec3 res = reflect(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = reflect(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_61ca21() {
-  f16vec3 res = reflect(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = reflect(f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.msl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.msl
index 2bd9b84..cf8a1a6 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void reflect_61ca21() {
-  half3 res = reflect(half3(0.0h), half3(0.0h));
+  half3 res = reflect(half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.spvasm
index 10d9a35..289c8ce 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %reflect_61ca21 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Reflect %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Reflect %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %reflect_61ca21
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %reflect_61ca21
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %reflect_61ca21
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %reflect_61ca21
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %reflect_61ca21
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %reflect_61ca21
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.wgsl
index a30006a..194bb6b 100644
--- a/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/reflect/61ca21.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn reflect_61ca21() {
-  var res : vec3<f16> = reflect(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = reflect(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl
index 854ac7e..a559dc9 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl
@@ -25,7 +25,7 @@
 
 // fn reflect(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn reflect_bb15ac() {
-  var res: vec2<f16> = reflect(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = reflect(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.dxc.hlsl
index ec357fa..573d3ee 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void reflect_bb15ac() {
-  vector<float16_t, 2> res = reflect((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = reflect((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.glsl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.glsl
index 6ea875d..5e9063d 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_bb15ac() {
-  f16vec2 res = reflect(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = reflect(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void reflect_bb15ac() {
-  f16vec2 res = reflect(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = reflect(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_bb15ac() {
-  f16vec2 res = reflect(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = reflect(f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.msl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.msl
index 5ade63c..a3e72b8 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void reflect_bb15ac() {
-  half2 res = reflect(half2(0.0h), half2(0.0h));
+  half2 res = reflect(half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.spvasm
index c9e584e..275c45f 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %reflect_bb15ac = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Reflect %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Reflect %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %reflect_bb15ac
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %reflect_bb15ac
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %reflect_bb15ac
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %reflect_bb15ac
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %reflect_bb15ac
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %reflect_bb15ac
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.wgsl
index 8e50cf3..bb64ffa 100644
--- a/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/reflect/bb15ac.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn reflect_bb15ac() {
-  var res : vec2<f16> = reflect(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = reflect(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl
index 5614a4e..c37f22f 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl
@@ -25,7 +25,7 @@
 
 // fn refract(vec<4, f16>, vec<4, f16>, f16) -> vec<4, f16>
 fn refract_0594ba() {
-  var res: vec4<f16> = refract(vec4<f16>(f16()), vec4<f16>(f16()), f16());
+  var res: vec4<f16> = refract(vec4<f16>(1.h), vec4<f16>(1.h), 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.dxc.hlsl
index cdb4a1c..7e12794 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void refract_0594ba() {
-  vector<float16_t, 4> res = refract((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, float16_t(0.0h));
+  vector<float16_t, 4> res = refract((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.glsl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.glsl
index dd0c411..c5293b5 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_0594ba() {
-  f16vec4 res = refract(f16vec4(0.0hf), f16vec4(0.0hf), 0.0hf);
+  f16vec4 res = refract(f16vec4(1.0hf), f16vec4(1.0hf), 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void refract_0594ba() {
-  f16vec4 res = refract(f16vec4(0.0hf), f16vec4(0.0hf), 0.0hf);
+  f16vec4 res = refract(f16vec4(1.0hf), f16vec4(1.0hf), 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_0594ba() {
-  f16vec4 res = refract(f16vec4(0.0hf), f16vec4(0.0hf), 0.0hf);
+  f16vec4 res = refract(f16vec4(1.0hf), f16vec4(1.0hf), 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.msl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.msl
index 5bb163e..e5623fa 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void refract_0594ba() {
-  half4 res = refract(half4(0.0h), half4(0.0h), 0.0h);
+  half4 res = refract(half4(1.0h), half4(1.0h), 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.spvasm
index 5d0cc45..9c59d3b 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %refract_0594ba = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Refract %17 %17 %18
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Refract %18 %18 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %refract_0594ba
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %refract_0594ba
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %refract_0594ba
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %refract_0594ba
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %refract_0594ba
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %refract_0594ba
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.wgsl
index ab78c7e..5d932c0 100644
--- a/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/refract/0594ba.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn refract_0594ba() {
-  var res : vec4<f16> = refract(vec4<f16>(f16()), vec4<f16>(f16()), f16());
+  var res : vec4<f16> = refract(vec4<f16>(1.0h), vec4<f16>(1.0h), 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl
index 130e449..f8f50f2 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl
@@ -25,7 +25,7 @@
 
 // fn refract(vec<2, f16>, vec<2, f16>, f16) -> vec<2, f16>
 fn refract_570cb3() {
-  var res: vec2<f16> = refract(vec2<f16>(f16()), vec2<f16>(f16()), f16());
+  var res: vec2<f16> = refract(vec2<f16>(1.h), vec2<f16>(1.h), 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.dxc.hlsl
index 1f7f29d..4a35894 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void refract_570cb3() {
-  vector<float16_t, 2> res = refract((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, float16_t(0.0h));
+  vector<float16_t, 2> res = refract((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.glsl
index 14fad7d..b0f0ad1 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_570cb3() {
-  f16vec2 res = refract(f16vec2(0.0hf), f16vec2(0.0hf), 0.0hf);
+  f16vec2 res = refract(f16vec2(1.0hf), f16vec2(1.0hf), 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void refract_570cb3() {
-  f16vec2 res = refract(f16vec2(0.0hf), f16vec2(0.0hf), 0.0hf);
+  f16vec2 res = refract(f16vec2(1.0hf), f16vec2(1.0hf), 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_570cb3() {
-  f16vec2 res = refract(f16vec2(0.0hf), f16vec2(0.0hf), 0.0hf);
+  f16vec2 res = refract(f16vec2(1.0hf), f16vec2(1.0hf), 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.msl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.msl
index da86c8c..1414d82 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void refract_570cb3() {
-  half2 res = refract(half2(0.0h), half2(0.0h), 0.0h);
+  half2 res = refract(half2(1.0h), half2(1.0h), 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.spvasm
index 238e6f1..63fcc15 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %refract_570cb3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Refract %17 %17 %18
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Refract %18 %18 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %refract_570cb3
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %refract_570cb3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %refract_570cb3
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %refract_570cb3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %refract_570cb3
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %refract_570cb3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.wgsl
index 45a3472..1c1d33c 100644
--- a/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/refract/570cb3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn refract_570cb3() {
-  var res : vec2<f16> = refract(vec2<f16>(f16()), vec2<f16>(f16()), f16());
+  var res : vec2<f16> = refract(vec2<f16>(1.0h), vec2<f16>(1.0h), 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl b/test/tint/builtins/gen/literal/refract/8984af.wgsl
index ccc6f61..6e38525 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl
@@ -25,7 +25,7 @@
 
 // fn refract(vec<3, f16>, vec<3, f16>, f16) -> vec<3, f16>
 fn refract_8984af() {
-  var res: vec3<f16> = refract(vec3<f16>(f16()), vec3<f16>(f16()), f16());
+  var res: vec3<f16> = refract(vec3<f16>(1.h), vec3<f16>(1.h), 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.dxc.hlsl
index 82aa4ad..5e25ebc 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void refract_8984af() {
-  vector<float16_t, 3> res = refract((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, float16_t(0.0h));
+  vector<float16_t, 3> res = refract((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.glsl b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.glsl
index cd538f6..5bfbd94 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_8984af() {
-  f16vec3 res = refract(f16vec3(0.0hf), f16vec3(0.0hf), 0.0hf);
+  f16vec3 res = refract(f16vec3(1.0hf), f16vec3(1.0hf), 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void refract_8984af() {
-  f16vec3 res = refract(f16vec3(0.0hf), f16vec3(0.0hf), 0.0hf);
+  f16vec3 res = refract(f16vec3(1.0hf), f16vec3(1.0hf), 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_8984af() {
-  f16vec3 res = refract(f16vec3(0.0hf), f16vec3(0.0hf), 0.0hf);
+  f16vec3 res = refract(f16vec3(1.0hf), f16vec3(1.0hf), 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.msl b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.msl
index 54ca61d..977ac05 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void refract_8984af() {
-  half3 res = refract(half3(0.0h), half3(0.0h), 0.0h);
+  half3 res = refract(half3(1.0h), half3(1.0h), 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.spvasm
index 28804a8..7192390 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,37 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
-         %18 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %21 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %refract_8984af = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Refract %17 %17 %18
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Refract %18 %18 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %refract_8984af
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %refract_8984af
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %refract_8984af
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %refract_8984af
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %refract_8984af
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %refract_8984af
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.wgsl
index 8ce7e19..7dd0916 100644
--- a/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/refract/8984af.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn refract_8984af() {
-  var res : vec3<f16> = refract(vec3<f16>(f16()), vec3<f16>(f16()), f16());
+  var res : vec3<f16> = refract(vec3<f16>(1.0h), vec3<f16>(1.0h), 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl b/test/tint/builtins/gen/literal/round/9078ef.wgsl
index d5223dc..f9753e1 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(f16) -> f16
 fn round_9078ef() {
-  var res: f16 = round(f16());
+  var res: f16 = round(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.dxc.hlsl
index e695f9b..54293a2 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_9078ef() {
-  float16_t res = round(float16_t(0.0h));
+  float16_t res = round(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.glsl b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.glsl
index 34f4fd1..f29b5bd 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_9078ef() {
-  float16_t res = round(0.0hf);
+  float16_t res = round(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void round_9078ef() {
-  float16_t res = round(0.0hf);
+  float16_t res = round(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_9078ef() {
-  float16_t res = round(0.0hf);
+  float16_t res = round(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.msl b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.msl
index c400dc4..dc3bbdb 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_9078ef() {
-  half res = rint(0.0h);
+  half res = rint(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.spvasm
index 80c9f07..44eed14 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_9078ef = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 RoundEven %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 RoundEven %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %round_9078ef
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %round_9078ef
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %round_9078ef
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %round_9078ef
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %round_9078ef
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %round_9078ef
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.wgsl
index f918a90..d0750a8 100644
--- a/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/round/9078ef.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_9078ef() {
-  var res : f16 = round(f16());
+  var res : f16 = round(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl b/test/tint/builtins/gen/literal/round/d87e84.wgsl
index 3ca7f69..a2bd758 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(vec<2, f16>) -> vec<2, f16>
 fn round_d87e84() {
-  var res: vec2<f16> = round(vec2<f16>(f16()));
+  var res: vec2<f16> = round(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.dxc.hlsl
index dc48afa..154f888 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_d87e84() {
-  vector<float16_t, 2> res = round((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = round((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.glsl b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.glsl
index e2e82c9..00afdb0 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_d87e84() {
-  f16vec2 res = round(f16vec2(0.0hf));
+  f16vec2 res = round(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void round_d87e84() {
-  f16vec2 res = round(f16vec2(0.0hf));
+  f16vec2 res = round(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_d87e84() {
-  f16vec2 res = round(f16vec2(0.0hf));
+  f16vec2 res = round(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.msl b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.msl
index af2b9b2..31cb08a 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_d87e84() {
-  half2 res = rint(half2(0.0h));
+  half2 res = rint(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.spvasm
index e6698b4..d94035e 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_d87e84 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 RoundEven %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 RoundEven %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %round_d87e84
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %round_d87e84
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %round_d87e84
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %round_d87e84
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %round_d87e84
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %round_d87e84
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.wgsl
index d3a6cc4..a771f35 100644
--- a/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/round/d87e84.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_d87e84() {
-  var res : vec2<f16> = round(vec2<f16>(f16()));
+  var res : vec2<f16> = round(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl
index dfa1264..a942899 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(vec<3, f16>) -> vec<3, f16>
 fn round_e1bba2() {
-  var res: vec3<f16> = round(vec3<f16>(f16()));
+  var res: vec3<f16> = round(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.dxc.hlsl
index 4941302..061b32c 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_e1bba2() {
-  vector<float16_t, 3> res = round((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = round((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.glsl
index 873d32a..0717d6b 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_e1bba2() {
-  f16vec3 res = round(f16vec3(0.0hf));
+  f16vec3 res = round(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void round_e1bba2() {
-  f16vec3 res = round(f16vec3(0.0hf));
+  f16vec3 res = round(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_e1bba2() {
-  f16vec3 res = round(f16vec3(0.0hf));
+  f16vec3 res = round(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.msl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.msl
index c4670c6..5f47a88 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_e1bba2() {
-  half3 res = rint(half3(0.0h));
+  half3 res = rint(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.spvasm
index 122df56..8e82f20 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_e1bba2 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 RoundEven %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 RoundEven %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %round_e1bba2
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %round_e1bba2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %round_e1bba2
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %round_e1bba2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %round_e1bba2
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %round_e1bba2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.wgsl
index 6da5186..2c270f9 100644
--- a/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/round/e1bba2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_e1bba2() {
-  var res : vec3<f16> = round(vec3<f16>(f16()));
+  var res : vec3<f16> = round(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl b/test/tint/builtins/gen/literal/round/f665b5.wgsl
index 6293239..a3889e4 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(vec<4, f16>) -> vec<4, f16>
 fn round_f665b5() {
-  var res: vec4<f16> = round(vec4<f16>(f16()));
+  var res: vec4<f16> = round(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.dxc.hlsl
index 287b5e1..c0820c5 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_f665b5() {
-  vector<float16_t, 4> res = round((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = round((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.glsl
index bc044ed..4293476 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_f665b5() {
-  f16vec4 res = round(f16vec4(0.0hf));
+  f16vec4 res = round(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void round_f665b5() {
-  f16vec4 res = round(f16vec4(0.0hf));
+  f16vec4 res = round(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_f665b5() {
-  f16vec4 res = round(f16vec4(0.0hf));
+  f16vec4 res = round(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.msl b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.msl
index db3fa98..92a75ec 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_f665b5() {
-  half4 res = rint(half4(0.0h));
+  half4 res = rint(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.spvasm
index 9600ad7..a0a5f90 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_f665b5 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 RoundEven %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 RoundEven %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %round_f665b5
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %round_f665b5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %round_f665b5
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %round_f665b5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %round_f665b5
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %round_f665b5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.wgsl
index 9338453..dbecbec 100644
--- a/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/round/f665b5.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_f665b5() {
-  var res : vec4<f16> = round(vec4<f16>(f16()));
+  var res : vec4<f16> = round(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl b/test/tint/builtins/gen/literal/saturate/462535.wgsl
index 3fe90cf..14b69ba 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(vec<3, f16>) -> vec<3, f16>
 fn saturate_462535() {
-  var res: vec3<f16> = saturate(vec3<f16>(f16()));
+  var res: vec3<f16> = saturate(vec3<f16>(2.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.dxc.hlsl
index 23800c3..ce230c9 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_462535() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.glsl b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.glsl
index 683f6d0..d525902 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_462535() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void saturate_462535() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_462535() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.msl b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.msl
index 35014be..4fab232 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_462535() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.spvasm
index dfa8ca2..0c3162d 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %saturate_462535 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %saturate_462535
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %saturate_462535
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %saturate_462535
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %saturate_462535
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %saturate_462535
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %saturate_462535
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.wgsl
index 25d4562..f4f845c 100644
--- a/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/462535.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_462535() {
-  var res : vec3<f16> = saturate(vec3<f16>(f16()));
+  var res : vec3<f16> = saturate(vec3<f16>(2.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl
index c5dc478..ec40321 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(vec<2, f16>) -> vec<2, f16>
 fn saturate_cd2028() {
-  var res: vec2<f16> = saturate(vec2<f16>(f16()));
+  var res: vec2<f16> = saturate(vec2<f16>(2.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.dxc.hlsl
index 97f10e9..9d77a0f 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_cd2028() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.glsl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.glsl
index 821559f..d63e3e7 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_cd2028() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void saturate_cd2028() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_cd2028() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.msl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.msl
index 0f23c02..c941ffe 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_cd2028() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.spvasm
index d1d24df..2312102 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %saturate_cd2028 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %saturate_cd2028
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %saturate_cd2028
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %saturate_cd2028
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %saturate_cd2028
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %saturate_cd2028
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %saturate_cd2028
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.wgsl
index f2a06c9..47ce6c7 100644
--- a/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/cd2028.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_cd2028() {
-  var res : vec2<f16> = saturate(vec2<f16>(f16()));
+  var res : vec2<f16> = saturate(vec2<f16>(2.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl
index 861fc12..22dd45f 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(vec<4, f16>) -> vec<4, f16>
 fn saturate_dcde71() {
-  var res: vec4<f16> = saturate(vec4<f16>(f16()));
+  var res: vec4<f16> = saturate(vec4<f16>(2.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.dxc.hlsl
index 23cb232..250ea3a 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_dcde71() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.glsl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.glsl
index 96296a0..0b80f1d 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_dcde71() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void saturate_dcde71() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_dcde71() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.msl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.msl
index 3dc2267..403440d 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_dcde71() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.spvasm
index c2fbd4a..1ae8455 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %saturate_dcde71 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %saturate_dcde71
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %saturate_dcde71
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %saturate_dcde71
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %saturate_dcde71
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %saturate_dcde71
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %saturate_dcde71
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.wgsl
index 8d23bd2..2c8aba9 100644
--- a/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/dcde71.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_dcde71() {
-  var res : vec4<f16> = saturate(vec4<f16>(f16()));
+  var res : vec4<f16> = saturate(vec4<f16>(2.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl
index edd402f..14ba3d6 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(f16) -> f16
 fn saturate_e8df56() {
-  var res: f16 = saturate(f16());
+  var res: f16 = saturate(2.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.dxc.hlsl
index 61c28d8..2774be4 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_e8df56() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.glsl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.glsl
index 4aab0f3..7e416e1 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_e8df56() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void saturate_e8df56() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void saturate_e8df56() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.msl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.msl
index 0219c63..6af9d37 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_e8df56() {
-  half res = 0.0h;
+  half res = 1.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.spvasm
index 846ff53..3f552d8 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %saturate_e8df56 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_0
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %saturate_e8df56
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %saturate_e8df56
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %saturate_e8df56
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %saturate_e8df56
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %saturate_e8df56
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %saturate_e8df56
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.wgsl
index 4662bb5..e983300 100644
--- a/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/e8df56.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_e8df56() {
-  var res : f16 = saturate(f16());
+  var res : f16 = saturate(2.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl b/test/tint/builtins/gen/literal/select/10e73b.wgsl
index 9632064..6f12933 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(f16, f16, bool) -> f16
 fn select_10e73b() {
-  var res: f16 = select(f16(), f16(), true);
+  var res: f16 = select(1.h, 1.h, true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.dxc.hlsl
index c52b572..3988b98 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_10e73b() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.glsl
index 65d3a98..943a733 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_10e73b() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_10e73b() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_10e73b() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.msl
index 41bda4f..009867d 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_10e73b() {
-  half res = 0.0h;
+  half res = 1.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.spvasm
index 8c2401f..1dd283e 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_10e73b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_0
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %select_10e73b
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %select_10e73b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %select_10e73b
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_10e73b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_10e73b
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_10e73b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.wgsl
index 4aa334d..426915f 100644
--- a/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/10e73b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_10e73b() {
-  var res : f16 = select(f16(), f16(), true);
+  var res : f16 = select(1.0h, 1.0h, true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl
index 2278b71..d7a24db 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(vec<3, f16>, vec<3, f16>, bool) -> vec<3, f16>
 fn select_1ada2a() {
-  var res: vec3<f16> = select(vec3<f16>(f16()), vec3<f16>(f16()), true);
+  var res: vec3<f16> = select(vec3<f16>(1.h), vec3<f16>(1.h), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.dxc.hlsl
index c719f6c..7d01083 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_1ada2a() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.glsl
index 9150c64..cd6989b 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_1ada2a() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_1ada2a() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_1ada2a() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.msl
index f310524..5d1e6c6 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_1ada2a() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.spvasm
index e2e371b..9f67b7c 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_1ada2a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_1ada2a
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_1ada2a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_1ada2a
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_1ada2a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_1ada2a
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_1ada2a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.wgsl
index 64fb3712..9d30044 100644
--- a/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/1ada2a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_1ada2a() {
-  var res : vec3<f16> = select(vec3<f16>(f16()), vec3<f16>(f16()), true);
+  var res : vec3<f16> = select(vec3<f16>(1.0h), vec3<f16>(1.0h), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl b/test/tint/builtins/gen/literal/select/53d518.wgsl
index a511c17..037dcf9 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(vec<3, f16>, vec<3, f16>, vec<3, bool>) -> vec<3, f16>
 fn select_53d518() {
-  var res: vec3<f16> = select(vec3<f16>(f16()), vec3<f16>(f16()), vec3<bool>(true));
+  var res: vec3<f16> = select(vec3<f16>(1.h), vec3<f16>(1.h), vec3<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.dxc.hlsl
index 861ff19..6f16f8d 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_53d518() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.glsl
index b4d88fd..2048423 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_53d518() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_53d518() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_53d518() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.msl
index 071a65a..885f80c 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_53d518() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.spvasm
index 3697f80..6b0b0ef 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_53d518 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_53d518
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_53d518
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_53d518
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_53d518
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_53d518
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_53d518
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.wgsl
index 425a44b..e443ffd 100644
--- a/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/53d518.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_53d518() {
-  var res : vec3<f16> = select(vec3<f16>(f16()), vec3<f16>(f16()), vec3<bool>(true));
+  var res : vec3<f16> = select(vec3<f16>(1.0h), vec3<f16>(1.0h), vec3<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl b/test/tint/builtins/gen/literal/select/830dd9.wgsl
index f1fda9e..9ed0584 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(vec<4, f16>, vec<4, f16>, bool) -> vec<4, f16>
 fn select_830dd9() {
-  var res: vec4<f16> = select(vec4<f16>(f16()), vec4<f16>(f16()), true);
+  var res: vec4<f16> = select(vec4<f16>(1.h), vec4<f16>(1.h), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.dxc.hlsl
index 9ccab1b..49e6f4a 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_830dd9() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.glsl
index 665c49e..9d787eb 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_830dd9() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_830dd9() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_830dd9() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.msl
index 6763d90..2663656 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_830dd9() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.spvasm
index debde2a..889da66 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_830dd9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_830dd9
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_830dd9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_830dd9
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_830dd9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_830dd9
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_830dd9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.wgsl
index cb99917..ddcd264 100644
--- a/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/830dd9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_830dd9() {
-  var res : vec4<f16> = select(vec4<f16>(f16()), vec4<f16>(f16()), true);
+  var res : vec4<f16> = select(vec4<f16>(1.0h), vec4<f16>(1.0h), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl
index 0cb4dc0..0b75a15 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(vec<2, f16>, vec<2, f16>, bool) -> vec<2, f16>
 fn select_86f9bd() {
-  var res: vec2<f16> = select(vec2<f16>(f16()), vec2<f16>(f16()), true);
+  var res: vec2<f16> = select(vec2<f16>(1.h), vec2<f16>(1.h), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.dxc.hlsl
index 8b55bbb..02858f1 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_86f9bd() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.glsl
index 002de10..1cec4b7 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_86f9bd() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_86f9bd() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_86f9bd() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.msl
index fd67e7b..9503bb5 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_86f9bd() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.spvasm
index 8711cd27..68c891c 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_86f9bd = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_86f9bd
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_86f9bd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_86f9bd
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_86f9bd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_86f9bd
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_86f9bd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.wgsl
index 0454417..5f3fa5c 100644
--- a/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/86f9bd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_86f9bd() {
-  var res : vec2<f16> = select(vec2<f16>(f16()), vec2<f16>(f16()), true);
+  var res : vec2<f16> = select(vec2<f16>(1.0h), vec2<f16>(1.0h), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl b/test/tint/builtins/gen/literal/select/a081f1.wgsl
index 9f4e789..2a16d51 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(vec<4, f16>, vec<4, f16>, vec<4, bool>) -> vec<4, f16>
 fn select_a081f1() {
-  var res: vec4<f16> = select(vec4<f16>(f16()), vec4<f16>(f16()), vec4<bool>(true));
+  var res: vec4<f16> = select(vec4<f16>(1.h), vec4<f16>(1.h), vec4<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.dxc.hlsl
index 4d8b7a1..5cc9a61 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_a081f1() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.glsl
index 8b2a610..73c1209 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_a081f1() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_a081f1() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_a081f1() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.msl
index 75ed4b4..6b4ae38 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_a081f1() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.spvasm
index c775c95..0f5187e 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_a081f1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_a081f1
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_a081f1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_a081f1
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_a081f1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_a081f1
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_a081f1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.wgsl
index feefad7..2dcaddf 100644
--- a/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/a081f1.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_a081f1() {
-  var res : vec4<f16> = select(vec4<f16>(f16()), vec4<f16>(f16()), vec4<bool>(true));
+  var res : vec4<f16> = select(vec4<f16>(1.0h), vec4<f16>(1.0h), vec4<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl
index 1d862f6..7f703db 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl
@@ -25,7 +25,7 @@
 
 // fn select(vec<2, f16>, vec<2, f16>, vec<2, bool>) -> vec<2, f16>
 fn select_ed7c13() {
-  var res: vec2<f16> = select(vec2<f16>(f16()), vec2<f16>(f16()), vec2<bool>(true));
+  var res: vec2<f16> = select(vec2<f16>(1.h), vec2<f16>(1.h), vec2<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.dxc.hlsl
index a15279a..5ba22f5 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_ed7c13() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.glsl
index a5fad2c..1ac6e9a 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_ed7c13() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void select_ed7c13() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_ed7c13() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.msl
index f02a9f6..a73404c 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_ed7c13() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.spvasm
index 7a647b8..3f969ce 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_ed7c13 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_ed7c13
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_ed7c13
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_ed7c13
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_ed7c13
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_ed7c13
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_ed7c13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.wgsl
index 427fba2..7df76f4 100644
--- a/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/ed7c13.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn select_ed7c13() {
-  var res : vec2<f16> = select(vec2<f16>(f16()), vec2<f16>(f16()), vec2<bool>(true));
+  var res : vec2<f16> = select(vec2<f16>(1.0h), vec2<f16>(1.0h), vec2<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl b/test/tint/builtins/gen/literal/sign/160933.wgsl
index 13a6c3b..95c8575 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(vec<4, f16>) -> vec<4, f16>
 fn sign_160933() {
-  var res: vec4<f16> = sign(vec4<f16>(f16()));
+  var res: vec4<f16> = sign(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.dxc.hlsl
index 9152c39..dca4974 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_160933() {
-  vector<float16_t, 4> res = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> res = (float16_t(1.0h)).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.glsl
index 0c3ed69..765c87b 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_160933() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sign_160933() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_160933() {
-  f16vec4 res = f16vec4(0.0hf);
+  f16vec4 res = f16vec4(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.msl b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.msl
index 2f05c90..351bd94 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_160933() {
-  half4 res = half4(0.0h);
+  half4 res = half4(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.spvasm
index 40f0e92..aa897b0 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_160933 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %sign_160933
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %sign_160933
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %sign_160933
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %sign_160933
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sign_160933
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %sign_160933
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.wgsl
index 5633954..57ff301 100644
--- a/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/160933.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_160933() {
-  var res : vec4<f16> = sign(vec4<f16>(f16()));
+  var res : vec4<f16> = sign(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl
index dc23259..a83e896 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(vec<3, f16>) -> vec<3, f16>
 fn sign_5d283a() {
-  var res: vec3<f16> = sign(vec3<f16>(f16()));
+  var res: vec3<f16> = sign(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.dxc.hlsl
index e8f8c0f..ffe5893 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_5d283a() {
-  vector<float16_t, 3> res = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> res = (float16_t(1.0h)).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.glsl
index 8530a60..e7fcb15 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_5d283a() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sign_5d283a() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_5d283a() {
-  f16vec3 res = f16vec3(0.0hf);
+  f16vec3 res = f16vec3(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.msl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.msl
index b104c0e..7628c40 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_5d283a() {
-  half3 res = half3(0.0h);
+  half3 res = half3(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.spvasm
index f36ab38..78e2a9e 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_5d283a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %sign_5d283a
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %sign_5d283a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %sign_5d283a
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %sign_5d283a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sign_5d283a
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %sign_5d283a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.wgsl
index 754ba8b..53ec054 100644
--- a/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/5d283a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_5d283a() {
-  var res : vec3<f16> = sign(vec3<f16>(f16()));
+  var res : vec3<f16> = sign(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl
index b8d85dc..bac048d 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(f16) -> f16
 fn sign_7c85ea() {
-  var res: f16 = sign(f16());
+  var res: f16 = sign(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.dxc.hlsl
index 59e1630..9402192 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_7c85ea() {
-  float16_t res = float16_t(0.0h);
+  float16_t res = float16_t(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.glsl
index 200e748..6c2f3c0 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_7c85ea() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sign_7c85ea() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_7c85ea() {
-  float16_t res = 0.0hf;
+  float16_t res = 1.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.msl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.msl
index 4c1254e..7b130e7 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_7c85ea() {
-  half res = 0.0h;
+  half res = 1.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.spvasm
index 49de559..990f3af 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -35,35 +35,36 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_7c85ea = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %res %half_0x1p_0
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %sign_7c85ea
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %sign_7c85ea
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %23 = OpLabel
+         %24 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %24
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %sign_7c85ea
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %sign_7c85ea
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sign_7c85ea
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %sign_7c85ea
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.wgsl
index 5080143..01a4db6 100644
--- a/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/7c85ea.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_7c85ea() {
-  var res : f16 = sign(f16());
+  var res : f16 = sign(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl
index 169814e..0937bae 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(vec<2, f16>) -> vec<2, f16>
 fn sign_ccdb3c() {
-  var res: vec2<f16> = sign(vec2<f16>(f16()));
+  var res: vec2<f16> = sign(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.dxc.hlsl
index ac168b5..90267ec 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_ccdb3c() {
-  vector<float16_t, 2> res = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> res = (float16_t(1.0h)).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.glsl
index 706af13..58f6dc7 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_ccdb3c() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sign_ccdb3c() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_ccdb3c() {
-  f16vec2 res = f16vec2(0.0hf);
+  f16vec2 res = f16vec2(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.msl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.msl
index 57c9090..9d4ea41 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_ccdb3c() {
-  half2 res = half2(0.0h);
+  half2 res = half2(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.spvasm
index a9f3c86..e667af5 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,35 +36,37 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %18 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_ccdb3c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %sign_ccdb3c
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %sign_ccdb3c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %sign_ccdb3c
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %sign_ccdb3c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sign_ccdb3c
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %sign_ccdb3c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.wgsl
index 0a5f0ec..2c9acae 100644
--- a/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/ccdb3c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_ccdb3c() {
-  var res : vec2<f16> = sign(vec2<f16>(f16()));
+  var res : vec2<f16> = sign(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl
index abe172c..6b14910 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(vec<3, f16>) -> vec<3, f16>
 fn sin_2c903b() {
-  var res: vec3<f16> = sin(vec3<f16>(f16()));
+  var res: vec3<f16> = sin(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.dxc.hlsl
index 8da2e1c..be59f65 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_2c903b() {
-  vector<float16_t, 3> res = sin((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = sin((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.glsl
index 21de9a7..73bd0a8 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_2c903b() {
-  f16vec3 res = sin(f16vec3(0.0hf));
+  f16vec3 res = sin(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sin_2c903b() {
-  f16vec3 res = sin(f16vec3(0.0hf));
+  f16vec3 res = sin(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_2c903b() {
-  f16vec3 res = sin(f16vec3(0.0hf));
+  f16vec3 res = sin(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.msl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.msl
index 85bf223..908d21b 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_2c903b() {
-  half3 res = sin(half3(0.0h));
+  half3 res = sin(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.spvasm
index ad41fb3..1c24923 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_2c903b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Sin %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Sin %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sin_2c903b
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sin_2c903b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sin_2c903b
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sin_2c903b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sin_2c903b
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sin_2c903b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.wgsl
index dd038f5..9eaacf0 100644
--- a/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sin/2c903b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_2c903b() {
-  var res : vec3<f16> = sin(vec3<f16>(f16()));
+  var res : vec3<f16> = sin(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl
index 527f92b..edc4cf4 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(vec<2, f16>) -> vec<2, f16>
 fn sin_3cca11() {
-  var res: vec2<f16> = sin(vec2<f16>(f16()));
+  var res: vec2<f16> = sin(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.dxc.hlsl
index 2f44faa..63a1b74 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_3cca11() {
-  vector<float16_t, 2> res = sin((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = sin((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.glsl
index 3d2c148..9681333 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_3cca11() {
-  f16vec2 res = sin(f16vec2(0.0hf));
+  f16vec2 res = sin(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sin_3cca11() {
-  f16vec2 res = sin(f16vec2(0.0hf));
+  f16vec2 res = sin(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_3cca11() {
-  f16vec2 res = sin(f16vec2(0.0hf));
+  f16vec2 res = sin(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.msl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.msl
index 0e631c7..6606e7e 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_3cca11() {
-  half2 res = sin(half2(0.0h));
+  half2 res = sin(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.spvasm
index f80895e..3b56d50 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_3cca11 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Sin %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Sin %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sin_3cca11
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sin_3cca11
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sin_3cca11
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sin_3cca11
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sin_3cca11
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sin_3cca11
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.wgsl
index 31f967a..4f84e03 100644
--- a/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sin/3cca11.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_3cca11() {
-  var res : vec2<f16> = sin(vec2<f16>(f16()));
+  var res : vec2<f16> = sin(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl
index 8a16544..5c11b08 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(vec<4, f16>) -> vec<4, f16>
 fn sin_5c0712() {
-  var res: vec4<f16> = sin(vec4<f16>(f16()));
+  var res: vec4<f16> = sin(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.dxc.hlsl
index ffc0c91..d80cc2c 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_5c0712() {
-  vector<float16_t, 4> res = sin((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = sin((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.glsl
index c16ccdf..51b1238 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_5c0712() {
-  f16vec4 res = sin(f16vec4(0.0hf));
+  f16vec4 res = sin(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sin_5c0712() {
-  f16vec4 res = sin(f16vec4(0.0hf));
+  f16vec4 res = sin(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_5c0712() {
-  f16vec4 res = sin(f16vec4(0.0hf));
+  f16vec4 res = sin(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.msl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.msl
index 9393236..2ca221f 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_5c0712() {
-  half4 res = sin(half4(0.0h));
+  half4 res = sin(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.spvasm
index 5060ea8..bb518bd 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_5c0712 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Sin %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Sin %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sin_5c0712
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sin_5c0712
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sin_5c0712
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sin_5c0712
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sin_5c0712
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sin_5c0712
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.wgsl
index 451cac0..43fc5bc 100644
--- a/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sin/5c0712.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_5c0712() {
-  var res : vec4<f16> = sin(vec4<f16>(f16()));
+  var res : vec4<f16> = sin(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl
index 9f69a70..874c051 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(f16) -> f16
 fn sin_66a59f() {
-  var res: f16 = sin(f16());
+  var res: f16 = sin(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.dxc.hlsl
index dbb0994..111f1b5 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_66a59f() {
-  float16_t res = sin(float16_t(0.0h));
+  float16_t res = sin(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.glsl
index dc6b376..68bffdd 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_66a59f() {
-  float16_t res = sin(0.0hf);
+  float16_t res = sin(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sin_66a59f() {
-  float16_t res = sin(0.0hf);
+  float16_t res = sin(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_66a59f() {
-  float16_t res = sin(0.0hf);
+  float16_t res = sin(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.msl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.msl
index 8204eec..9c32a94 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_66a59f() {
-  half res = sin(0.0h);
+  half res = sin(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.spvasm
index 19a2e29..00d3618 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_66a59f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Sin %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Sin %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %sin_66a59f
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %sin_66a59f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %sin_66a59f
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %sin_66a59f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sin_66a59f
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %sin_66a59f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.wgsl
index afb239b..78e2085 100644
--- a/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sin/66a59f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_66a59f() {
-  var res : f16 = sin(f16());
+  var res : f16 = sin(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl
index dc47091..576523b 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(vec<3, f16>) -> vec<3, f16>
 fn sinh_0908c1() {
-  var res: vec3<f16> = sinh(vec3<f16>(f16()));
+  var res: vec3<f16> = sinh(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.dxc.hlsl
index 797d893..1f06f77 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_0908c1() {
-  vector<float16_t, 3> res = sinh((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = sinh((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.glsl
index 6130c64..2c61420 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_0908c1() {
-  f16vec3 res = sinh(f16vec3(0.0hf));
+  f16vec3 res = sinh(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sinh_0908c1() {
-  f16vec3 res = sinh(f16vec3(0.0hf));
+  f16vec3 res = sinh(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_0908c1() {
-  f16vec3 res = sinh(f16vec3(0.0hf));
+  f16vec3 res = sinh(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.msl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.msl
index 5da508a..54d1892 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_0908c1() {
-  half3 res = sinh(half3(0.0h));
+  half3 res = sinh(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.spvasm
index 62c2763..3a1f92c 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_0908c1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Sinh %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Sinh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sinh_0908c1
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sinh_0908c1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sinh_0908c1
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sinh_0908c1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sinh_0908c1
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sinh_0908c1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.wgsl
index f583b10..1da348b 100644
--- a/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/0908c1.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_0908c1() {
-  var res : vec3<f16> = sinh(vec3<f16>(f16()));
+  var res : vec3<f16> = sinh(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl
index ad51136..2b22eed 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(f16) -> f16
 fn sinh_69cce2() {
-  var res: f16 = sinh(f16());
+  var res: f16 = sinh(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.dxc.hlsl
index 2772106..7b8e6ce 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_69cce2() {
-  float16_t res = sinh(float16_t(0.0h));
+  float16_t res = sinh(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.glsl
index 4b0c3e4..a64c8dd 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_69cce2() {
-  float16_t res = sinh(0.0hf);
+  float16_t res = sinh(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sinh_69cce2() {
-  float16_t res = sinh(0.0hf);
+  float16_t res = sinh(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_69cce2() {
-  float16_t res = sinh(0.0hf);
+  float16_t res = sinh(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.msl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.msl
index 5fada22..ae6c123 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_69cce2() {
-  half res = sinh(0.0h);
+  half res = sinh(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.spvasm
index 994f5e4..af0bf6f 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_69cce2 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Sinh %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Sinh %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %sinh_69cce2
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %sinh_69cce2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %sinh_69cce2
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %sinh_69cce2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sinh_69cce2
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %sinh_69cce2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.wgsl
index 8defcbd..1f7cd9a 100644
--- a/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/69cce2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_69cce2() {
-  var res : f16 = sinh(f16());
+  var res : f16 = sinh(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl
index 09ce2ee..7c5a290 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(vec<2, f16>) -> vec<2, f16>
 fn sinh_924f19() {
-  var res: vec2<f16> = sinh(vec2<f16>(f16()));
+  var res: vec2<f16> = sinh(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.dxc.hlsl
index e79ca20..cdcc434 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_924f19() {
-  vector<float16_t, 2> res = sinh((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = sinh((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.glsl
index 844c7ec..fd2eb90 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_924f19() {
-  f16vec2 res = sinh(f16vec2(0.0hf));
+  f16vec2 res = sinh(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sinh_924f19() {
-  f16vec2 res = sinh(f16vec2(0.0hf));
+  f16vec2 res = sinh(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_924f19() {
-  f16vec2 res = sinh(f16vec2(0.0hf));
+  f16vec2 res = sinh(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.msl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.msl
index 48d04ae..64fe921 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_924f19() {
-  half2 res = sinh(half2(0.0h));
+  half2 res = sinh(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.spvasm
index 5f2db5e..59e22b3 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_924f19 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Sinh %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Sinh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sinh_924f19
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sinh_924f19
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sinh_924f19
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sinh_924f19
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sinh_924f19
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sinh_924f19
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.wgsl
index d384cab..7ebb07c 100644
--- a/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/924f19.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_924f19() {
-  var res : vec2<f16> = sinh(vec2<f16>(f16()));
+  var res : vec2<f16> = sinh(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl
index 878d0b6..c73702f 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(vec<4, f16>) -> vec<4, f16>
 fn sinh_ba7e25() {
-  var res: vec4<f16> = sinh(vec4<f16>(f16()));
+  var res: vec4<f16> = sinh(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.dxc.hlsl
index 87cbff0..a5b5e1c 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_ba7e25() {
-  vector<float16_t, 4> res = sinh((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = sinh((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.glsl
index 61015c0..f404443 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_ba7e25() {
-  f16vec4 res = sinh(f16vec4(0.0hf));
+  f16vec4 res = sinh(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sinh_ba7e25() {
-  f16vec4 res = sinh(f16vec4(0.0hf));
+  f16vec4 res = sinh(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_ba7e25() {
-  f16vec4 res = sinh(f16vec4(0.0hf));
+  f16vec4 res = sinh(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.msl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.msl
index 9aef6b3..bd5ec4c 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_ba7e25() {
-  half4 res = sinh(half4(0.0h));
+  half4 res = sinh(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.spvasm
index 3e9f2c0..51403b1 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_ba7e25 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Sinh %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Sinh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sinh_ba7e25
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sinh_ba7e25
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sinh_ba7e25
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sinh_ba7e25
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sinh_ba7e25
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sinh_ba7e25
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.wgsl
index 9587e3e..d05628a 100644
--- a/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sinh/ba7e25.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_ba7e25() {
-  var res : vec4<f16> = sinh(vec4<f16>(f16()));
+  var res : vec4<f16> = sinh(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl
index a6bdd56..df27cfa 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl
@@ -25,7 +25,7 @@
 
 // fn smoothstep(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn smoothstep_12c031() {
-  var res: vec2<f16> = smoothstep(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = smoothstep(vec2<f16>(1.h), vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.dxc.hlsl
index 836c5b9..3a449d7 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void smoothstep_12c031() {
-  vector<float16_t, 2> res = smoothstep((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = smoothstep((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.glsl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.glsl
index 64a110f..2e1fb6f 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_12c031() {
-  f16vec2 res = smoothstep(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = smoothstep(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void smoothstep_12c031() {
-  f16vec2 res = smoothstep(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = smoothstep(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_12c031() {
-  f16vec2 res = smoothstep(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16vec2 res = smoothstep(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.msl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.msl
index 1f30e7c..b11f421 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void smoothstep_12c031() {
-  half2 res = smoothstep(half2(0.0h), half2(0.0h), half2(0.0h));
+  half2 res = smoothstep(half2(1.0h), half2(1.0h), half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.spvasm
index aaaee6e..1df4bfc 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_12c031 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 SmoothStep %17 %17 %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 SmoothStep %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %smoothstep_12c031
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %smoothstep_12c031
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %smoothstep_12c031
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %smoothstep_12c031
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %smoothstep_12c031
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %smoothstep_12c031
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.wgsl
index 62ad2a7..e48b625 100644
--- a/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/12c031.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn smoothstep_12c031() {
-  var res : vec2<f16> = smoothstep(vec2<f16>(f16()), vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = smoothstep(vec2<f16>(1.0h), vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl
index d9e1447..2fe58c0 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl
@@ -25,7 +25,7 @@
 
 // fn smoothstep(f16, f16, f16) -> f16
 fn smoothstep_586e12() {
-  var res: f16 = smoothstep(f16(), f16(), f16());
+  var res: f16 = smoothstep(1.h, 1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.dxc.hlsl
index 0a0bb8a..869b831 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void smoothstep_586e12() {
-  float16_t res = smoothstep(float16_t(0.0h), float16_t(0.0h), float16_t(0.0h));
+  float16_t res = smoothstep(float16_t(1.0h), float16_t(1.0h), float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.glsl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.glsl
index 26afc28..33de993 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_586e12() {
-  float16_t res = smoothstep(0.0hf, 0.0hf, 0.0hf);
+  float16_t res = smoothstep(1.0hf, 1.0hf, 1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void smoothstep_586e12() {
-  float16_t res = smoothstep(0.0hf, 0.0hf, 0.0hf);
+  float16_t res = smoothstep(1.0hf, 1.0hf, 1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_586e12() {
-  float16_t res = smoothstep(0.0hf, 0.0hf, 0.0hf);
+  float16_t res = smoothstep(1.0hf, 1.0hf, 1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.msl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.msl
index a6a9fb3..8ab6ed1 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void smoothstep_586e12() {
-  half res = smoothstep(0.0h, 0.0h, 0.0h);
+  half res = smoothstep(1.0h, 1.0h, 1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.spvasm
index 38ef86f..424b166 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_586e12 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 SmoothStep %16 %16 %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 SmoothStep %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %smoothstep_586e12
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %smoothstep_586e12
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %smoothstep_586e12
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %smoothstep_586e12
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %smoothstep_586e12
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %smoothstep_586e12
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.wgsl
index e6600ae..bfd4e63 100644
--- a/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/586e12.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn smoothstep_586e12() {
-  var res : f16 = smoothstep(f16(), f16(), f16());
+  var res : f16 = smoothstep(1.0h, 1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl
index 4fdbd51..b21a6ba 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl
@@ -25,7 +25,7 @@
 
 // fn smoothstep(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn smoothstep_6e7a74() {
-  var res: vec3<f16> = smoothstep(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = smoothstep(vec3<f16>(1.h), vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.dxc.hlsl
index f1869c2..4a5261e 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void smoothstep_6e7a74() {
-  vector<float16_t, 3> res = smoothstep((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = smoothstep((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.glsl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.glsl
index 12129b7..39c0e20 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_6e7a74() {
-  f16vec3 res = smoothstep(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = smoothstep(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void smoothstep_6e7a74() {
-  f16vec3 res = smoothstep(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = smoothstep(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_6e7a74() {
-  f16vec3 res = smoothstep(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16vec3 res = smoothstep(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.msl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.msl
index d90125c..e4b2026 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void smoothstep_6e7a74() {
-  half3 res = smoothstep(half3(0.0h), half3(0.0h), half3(0.0h));
+  half3 res = smoothstep(half3(1.0h), half3(1.0h), half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.spvasm
index 21d9c28..d381603 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_6e7a74 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 SmoothStep %17 %17 %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 SmoothStep %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %smoothstep_6e7a74
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %smoothstep_6e7a74
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %smoothstep_6e7a74
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %smoothstep_6e7a74
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %smoothstep_6e7a74
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %smoothstep_6e7a74
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.wgsl
index 1a7ea0d..807bdab 100644
--- a/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/6e7a74.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn smoothstep_6e7a74() {
-  var res : vec3<f16> = smoothstep(vec3<f16>(f16()), vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = smoothstep(vec3<f16>(1.0h), vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl
index e1de207..523df81 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl
@@ -25,7 +25,7 @@
 
 // fn smoothstep(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn smoothstep_c43ebd() {
-  var res: vec4<f16> = smoothstep(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = smoothstep(vec4<f16>(1.h), vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.dxc.hlsl
index e25a8cd..7c6c44e 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void smoothstep_c43ebd() {
-  vector<float16_t, 4> res = smoothstep((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = smoothstep((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.glsl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.glsl
index b67a5c8..996656a 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_c43ebd() {
-  f16vec4 res = smoothstep(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = smoothstep(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void smoothstep_c43ebd() {
-  f16vec4 res = smoothstep(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = smoothstep(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_c43ebd() {
-  f16vec4 res = smoothstep(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16vec4 res = smoothstep(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.msl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.msl
index c7743d7..3503d95 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void smoothstep_c43ebd() {
-  half4 res = smoothstep(half4(0.0h), half4(0.0h), half4(0.0h));
+  half4 res = smoothstep(half4(1.0h), half4(1.0h), half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.spvasm
index 9230951..a81f848 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_c43ebd = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 SmoothStep %17 %17 %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 SmoothStep %18 %18 %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %smoothstep_c43ebd
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %smoothstep_c43ebd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %smoothstep_c43ebd
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %smoothstep_c43ebd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %smoothstep_c43ebd
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %smoothstep_c43ebd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.wgsl
index 1b6b725..aad2d01 100644
--- a/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/smoothstep/c43ebd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn smoothstep_c43ebd() {
-  var res : vec4<f16> = smoothstep(vec4<f16>(f16()), vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = smoothstep(vec4<f16>(1.0h), vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl
index 019539d..7a9166a 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(vec<4, f16>) -> vec<4, f16>
 fn sqrt_803d1c() {
-  var res: vec4<f16> = sqrt(vec4<f16>(f16()));
+  var res: vec4<f16> = sqrt(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.dxc.hlsl
index 0b44b89..1f072d6 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_803d1c() {
-  vector<float16_t, 4> res = sqrt((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = sqrt((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.glsl
index 2b0c4f5..8282522 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_803d1c() {
-  f16vec4 res = sqrt(f16vec4(0.0hf));
+  f16vec4 res = sqrt(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sqrt_803d1c() {
-  f16vec4 res = sqrt(f16vec4(0.0hf));
+  f16vec4 res = sqrt(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_803d1c() {
-  f16vec4 res = sqrt(f16vec4(0.0hf));
+  f16vec4 res = sqrt(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.msl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.msl
index c85c1ae..f5ed424 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_803d1c() {
-  half4 res = sqrt(half4(0.0h));
+  half4 res = sqrt(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.spvasm
index 3204761..eb9d728 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_803d1c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Sqrt %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Sqrt %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sqrt_803d1c
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sqrt_803d1c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sqrt_803d1c
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sqrt_803d1c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sqrt_803d1c
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sqrt_803d1c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.wgsl
index 3361e60..52cba12 100644
--- a/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/803d1c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_803d1c() {
-  var res : vec4<f16> = sqrt(vec4<f16>(f16()));
+  var res : vec4<f16> = sqrt(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl
index 7bdb02f..7145d1a 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(vec<3, f16>) -> vec<3, f16>
 fn sqrt_895a0c() {
-  var res: vec3<f16> = sqrt(vec3<f16>(f16()));
+  var res: vec3<f16> = sqrt(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.dxc.hlsl
index 3ce6e95..b3f2c26 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_895a0c() {
-  vector<float16_t, 3> res = sqrt((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = sqrt((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.glsl
index d0cedab..4a89c94 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_895a0c() {
-  f16vec3 res = sqrt(f16vec3(0.0hf));
+  f16vec3 res = sqrt(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sqrt_895a0c() {
-  f16vec3 res = sqrt(f16vec3(0.0hf));
+  f16vec3 res = sqrt(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_895a0c() {
-  f16vec3 res = sqrt(f16vec3(0.0hf));
+  f16vec3 res = sqrt(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.msl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.msl
index 72be3e1..e51d255 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_895a0c() {
-  half3 res = sqrt(half3(0.0h));
+  half3 res = sqrt(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.spvasm
index bcc0768..377745c 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_895a0c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Sqrt %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Sqrt %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sqrt_895a0c
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sqrt_895a0c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sqrt_895a0c
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sqrt_895a0c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sqrt_895a0c
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sqrt_895a0c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.wgsl
index 44c3686..b853037 100644
--- a/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/895a0c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_895a0c() {
-  var res : vec3<f16> = sqrt(vec3<f16>(f16()));
+  var res : vec3<f16> = sqrt(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl
index 4158a6f..3f47df0 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(vec<2, f16>) -> vec<2, f16>
 fn sqrt_d9ab4d() {
-  var res: vec2<f16> = sqrt(vec2<f16>(f16()));
+  var res: vec2<f16> = sqrt(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.dxc.hlsl
index dc9426f..a31a43c 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_d9ab4d() {
-  vector<float16_t, 2> res = sqrt((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = sqrt((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.glsl
index 8a12e8f..d31df4c 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_d9ab4d() {
-  f16vec2 res = sqrt(f16vec2(0.0hf));
+  f16vec2 res = sqrt(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sqrt_d9ab4d() {
-  f16vec2 res = sqrt(f16vec2(0.0hf));
+  f16vec2 res = sqrt(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_d9ab4d() {
-  f16vec2 res = sqrt(f16vec2(0.0hf));
+  f16vec2 res = sqrt(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.msl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.msl
index d64d5a1e..acc30f2 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_d9ab4d() {
-  half2 res = sqrt(half2(0.0h));
+  half2 res = sqrt(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.spvasm
index d18a251..f186c13 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_d9ab4d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Sqrt %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Sqrt %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %sqrt_d9ab4d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sqrt_d9ab4d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %sqrt_d9ab4d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sqrt_d9ab4d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %sqrt_d9ab4d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sqrt_d9ab4d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.wgsl
index ccda9f1..6b1d995 100644
--- a/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/d9ab4d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_d9ab4d() {
-  var res : vec2<f16> = sqrt(vec2<f16>(f16()));
+  var res : vec2<f16> = sqrt(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl
index 4dc19b0..ab7ca7e 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(f16) -> f16
 fn sqrt_ec33e9() {
-  var res: f16 = sqrt(f16());
+  var res: f16 = sqrt(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.dxc.hlsl
index c76014e..bc3797b 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_ec33e9() {
-  float16_t res = sqrt(float16_t(0.0h));
+  float16_t res = sqrt(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.glsl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.glsl
index 89b0d09..d08c0af 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_ec33e9() {
-  float16_t res = sqrt(0.0hf);
+  float16_t res = sqrt(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void sqrt_ec33e9() {
-  float16_t res = sqrt(0.0hf);
+  float16_t res = sqrt(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_ec33e9() {
-  float16_t res = sqrt(0.0hf);
+  float16_t res = sqrt(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.msl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.msl
index bfd3d49..cdf9675 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_ec33e9() {
-  half res = sqrt(0.0h);
+  half res = sqrt(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.spvasm
index a39a404..06634a2 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_ec33e9 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Sqrt %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Sqrt %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %sqrt_ec33e9
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %sqrt_ec33e9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %sqrt_ec33e9
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %sqrt_ec33e9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sqrt_ec33e9
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %sqrt_ec33e9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.wgsl
index 5145314..50880e5 100644
--- a/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sqrt/ec33e9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_ec33e9() {
-  var res : f16 = sqrt(f16());
+  var res : f16 = sqrt(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/07cb06.wgsl b/test/tint/builtins/gen/literal/step/07cb06.wgsl
index 2baa12b..47da6bf 100644
--- a/test/tint/builtins/gen/literal/step/07cb06.wgsl
+++ b/test/tint/builtins/gen/literal/step/07cb06.wgsl
@@ -25,7 +25,7 @@
 
 // fn step(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn step_07cb06() {
-  var res: vec2<f16> = step(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res: vec2<f16> = step(vec2<f16>(1.h), vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.wgsl
index 4ebf853..31dbd2d 100644
--- a/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/07cb06.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn step_07cb06() {
-  var res : vec2<f16> = step(vec2<f16>(f16()), vec2<f16>(f16()));
+  var res : vec2<f16> = step(vec2<f16>(1.0h), vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/630d07.wgsl b/test/tint/builtins/gen/literal/step/630d07.wgsl
index b789a99..b7fe024 100644
--- a/test/tint/builtins/gen/literal/step/630d07.wgsl
+++ b/test/tint/builtins/gen/literal/step/630d07.wgsl
@@ -25,7 +25,7 @@
 
 // fn step(f16, f16) -> f16
 fn step_630d07() {
-  var res: f16 = step(f16(), f16());
+  var res: f16 = step(1.h, 1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.wgsl
index 6a0527d..666cdf0 100644
--- a/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/630d07.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn step_630d07() {
-  var res : f16 = step(f16(), f16());
+  var res : f16 = step(1.0h, 1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/baa320.wgsl b/test/tint/builtins/gen/literal/step/baa320.wgsl
index b2e66b0..f30ef35 100644
--- a/test/tint/builtins/gen/literal/step/baa320.wgsl
+++ b/test/tint/builtins/gen/literal/step/baa320.wgsl
@@ -25,7 +25,7 @@
 
 // fn step(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn step_baa320() {
-  var res: vec4<f16> = step(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res: vec4<f16> = step(vec4<f16>(1.h), vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.wgsl
index c500a65..5199ffc 100644
--- a/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/baa320.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn step_baa320() {
-  var res : vec4<f16> = step(vec4<f16>(f16()), vec4<f16>(f16()));
+  var res : vec4<f16> = step(vec4<f16>(1.0h), vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/cc6b61.wgsl b/test/tint/builtins/gen/literal/step/cc6b61.wgsl
index 77da1c9..d4064c5 100644
--- a/test/tint/builtins/gen/literal/step/cc6b61.wgsl
+++ b/test/tint/builtins/gen/literal/step/cc6b61.wgsl
@@ -25,7 +25,7 @@
 
 // fn step(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn step_cc6b61() {
-  var res: vec3<f16> = step(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res: vec3<f16> = step(vec3<f16>(1.h), vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.wgsl
index d1d9624..a68542a 100644
--- a/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/cc6b61.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn step_cc6b61() {
-  var res : vec3<f16> = step(vec3<f16>(f16()), vec3<f16>(f16()));
+  var res : vec3<f16> = step(vec3<f16>(1.0h), vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl b/test/tint/builtins/gen/literal/tan/539e54.wgsl
index 912e7b9..ce8f09b 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(vec<4, f16>) -> vec<4, f16>
 fn tan_539e54() {
-  var res: vec4<f16> = tan(vec4<f16>(f16()));
+  var res: vec4<f16> = tan(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.dxc.hlsl
index aa87efc..4de5feb 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_539e54() {
-  vector<float16_t, 4> res = tan((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = tan((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.glsl
index 8c94127..2db4796 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_539e54() {
-  f16vec4 res = tan(f16vec4(0.0hf));
+  f16vec4 res = tan(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tan_539e54() {
-  f16vec4 res = tan(f16vec4(0.0hf));
+  f16vec4 res = tan(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_539e54() {
-  f16vec4 res = tan(f16vec4(0.0hf));
+  f16vec4 res = tan(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.msl b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.msl
index 268bfda..eabcb69 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_539e54() {
-  half4 res = tan(half4(0.0h));
+  half4 res = tan(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.spvasm
index 12de658..5c8e228 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_539e54 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Tan %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Tan %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %tan_539e54
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tan_539e54
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %tan_539e54
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tan_539e54
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %tan_539e54
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tan_539e54
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.wgsl
index 91e3dfd..7554cbe 100644
--- a/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tan/539e54.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_539e54() {
-  var res : vec4<f16> = tan(vec4<f16>(f16()));
+  var res : vec4<f16> = tan(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl
index 1ff6156..a222cb8 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(vec<2, f16>) -> vec<2, f16>
 fn tan_9f7c9c() {
-  var res: vec2<f16> = tan(vec2<f16>(f16()));
+  var res: vec2<f16> = tan(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.dxc.hlsl
index bac1555..563a5cc 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_9f7c9c() {
-  vector<float16_t, 2> res = tan((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = tan((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.glsl
index 2b07fc4..765a8a1 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_9f7c9c() {
-  f16vec2 res = tan(f16vec2(0.0hf));
+  f16vec2 res = tan(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tan_9f7c9c() {
-  f16vec2 res = tan(f16vec2(0.0hf));
+  f16vec2 res = tan(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_9f7c9c() {
-  f16vec2 res = tan(f16vec2(0.0hf));
+  f16vec2 res = tan(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.msl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.msl
index ff408ad..7780f42 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_9f7c9c() {
-  half2 res = tan(half2(0.0h));
+  half2 res = tan(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.spvasm
index 658d6a6..ef0a883 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_9f7c9c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Tan %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Tan %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %tan_9f7c9c
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tan_9f7c9c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %tan_9f7c9c
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tan_9f7c9c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %tan_9f7c9c
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tan_9f7c9c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.wgsl
index 1287e05..f06c471 100644
--- a/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tan/9f7c9c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_9f7c9c() {
-  var res : vec2<f16> = tan(vec2<f16>(f16()));
+  var res : vec2<f16> = tan(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl
index c76db2d..9b0cd1d 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(f16) -> f16
 fn tan_d4d491() {
-  var res: f16 = tan(f16());
+  var res: f16 = tan(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.dxc.hlsl
index a4be323..511c901 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_d4d491() {
-  float16_t res = tan(float16_t(0.0h));
+  float16_t res = tan(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.glsl
index e6a73c8..05e0766 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_d4d491() {
-  float16_t res = tan(0.0hf);
+  float16_t res = tan(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tan_d4d491() {
-  float16_t res = tan(0.0hf);
+  float16_t res = tan(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_d4d491() {
-  float16_t res = tan(0.0hf);
+  float16_t res = tan(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.msl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.msl
index 3dc2e14..fb3879e 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_d4d491() {
-  half res = tan(0.0h);
+  half res = tan(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.spvasm
index 661dd9a..af79640 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_d4d491 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Tan %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Tan %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %tan_d4d491
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %tan_d4d491
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %tan_d4d491
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %tan_d4d491
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tan_d4d491
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %tan_d4d491
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.wgsl
index da8f919..2c01808 100644
--- a/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tan/d4d491.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_d4d491() {
-  var res : f16 = tan(f16());
+  var res : f16 = tan(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl b/test/tint/builtins/gen/literal/tan/db0456.wgsl
index 9d70504..2afdfa6 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(vec<3, f16>) -> vec<3, f16>
 fn tan_db0456() {
-  var res: vec3<f16> = tan(vec3<f16>(f16()));
+  var res: vec3<f16> = tan(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.dxc.hlsl
index 2253d71..5899c36 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_db0456() {
-  vector<float16_t, 3> res = tan((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = tan((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.glsl
index 4812d1b..fe3bade 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_db0456() {
-  f16vec3 res = tan(f16vec3(0.0hf));
+  f16vec3 res = tan(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tan_db0456() {
-  f16vec3 res = tan(f16vec3(0.0hf));
+  f16vec3 res = tan(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_db0456() {
-  f16vec3 res = tan(f16vec3(0.0hf));
+  f16vec3 res = tan(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.msl b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.msl
index 3d87665..7adab56 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_db0456() {
-  half3 res = tan(half3(0.0h));
+  half3 res = tan(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.spvasm
index 2f1c402..a66872b 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_db0456 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Tan %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Tan %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %tan_db0456
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tan_db0456
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %tan_db0456
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tan_db0456
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %tan_db0456
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tan_db0456
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.wgsl
index dc68ad2..13a6134 100644
--- a/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tan/db0456.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_db0456() {
-  var res : vec3<f16> = tan(vec3<f16>(f16()));
+  var res : vec3<f16> = tan(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl
index a02fef4..8a52a4d 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(vec<3, f16>) -> vec<3, f16>
 fn tanh_06a4fe() {
-  var res: vec3<f16> = tanh(vec3<f16>(f16()));
+  var res: vec3<f16> = tanh(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.dxc.hlsl
index fb193b2..7bd1656 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_06a4fe() {
-  vector<float16_t, 3> res = tanh((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = tanh((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.glsl
index 0840a2c..3b1ec6b 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_06a4fe() {
-  f16vec3 res = tanh(f16vec3(0.0hf));
+  f16vec3 res = tanh(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tanh_06a4fe() {
-  f16vec3 res = tanh(f16vec3(0.0hf));
+  f16vec3 res = tanh(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_06a4fe() {
-  f16vec3 res = tanh(f16vec3(0.0hf));
+  f16vec3 res = tanh(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.msl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.msl
index ae1bf02..7a53efa 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_06a4fe() {
-  half3 res = tanh(half3(0.0h));
+  half3 res = tanh(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.spvasm
index b06c654..0c187bf 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_06a4fe = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Tanh %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Tanh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %tanh_06a4fe
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tanh_06a4fe
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %tanh_06a4fe
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tanh_06a4fe
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %tanh_06a4fe
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tanh_06a4fe
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.wgsl
index fde59a5..ecbc835 100644
--- a/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/06a4fe.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_06a4fe() {
-  var res : vec3<f16> = tanh(vec3<f16>(f16()));
+  var res : vec3<f16> = tanh(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl
index b83daae..59d2edc 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(f16) -> f16
 fn tanh_5b19af() {
-  var res: f16 = tanh(f16());
+  var res: f16 = tanh(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.dxc.hlsl
index 9d2dee6..0beb95e 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_5b19af() {
-  float16_t res = tanh(float16_t(0.0h));
+  float16_t res = tanh(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.glsl
index b909cb9..107a42c 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_5b19af() {
-  float16_t res = tanh(0.0hf);
+  float16_t res = tanh(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tanh_5b19af() {
-  float16_t res = tanh(0.0hf);
+  float16_t res = tanh(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_5b19af() {
-  float16_t res = tanh(0.0hf);
+  float16_t res = tanh(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.msl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.msl
index a012294..74ce3f2 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_5b19af() {
-  half res = tanh(0.0h);
+  half res = tanh(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.spvasm
index db2580f..a7669f7 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_5b19af = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Tanh %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Tanh %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %tanh_5b19af
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %tanh_5b19af
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %tanh_5b19af
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %tanh_5b19af
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tanh_5b19af
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %tanh_5b19af
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.wgsl
index a2e4217..01e06f4 100644
--- a/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/5b19af.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_5b19af() {
-  var res : f16 = tanh(f16());
+  var res : f16 = tanh(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl
index acd3e21..c489af8 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(vec<2, f16>) -> vec<2, f16>
 fn tanh_6d105a() {
-  var res: vec2<f16> = tanh(vec2<f16>(f16()));
+  var res: vec2<f16> = tanh(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.dxc.hlsl
index 9a1b417..f4cb76a 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_6d105a() {
-  vector<float16_t, 2> res = tanh((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = tanh((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.glsl
index f5aa9d4..b4a21cd 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_6d105a() {
-  f16vec2 res = tanh(f16vec2(0.0hf));
+  f16vec2 res = tanh(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tanh_6d105a() {
-  f16vec2 res = tanh(f16vec2(0.0hf));
+  f16vec2 res = tanh(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_6d105a() {
-  f16vec2 res = tanh(f16vec2(0.0hf));
+  f16vec2 res = tanh(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.msl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.msl
index b9795af..b16a5a5 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_6d105a() {
-  half2 res = tanh(half2(0.0h));
+  half2 res = tanh(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.spvasm
index 101dbc6..95167d3 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_6d105a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Tanh %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Tanh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %tanh_6d105a
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tanh_6d105a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %tanh_6d105a
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tanh_6d105a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %tanh_6d105a
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tanh_6d105a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.wgsl
index 9b0b089..1c6722d 100644
--- a/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/6d105a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_6d105a() {
-  var res : vec2<f16> = tanh(vec2<f16>(f16()));
+  var res : vec2<f16> = tanh(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl
index c0579cc..dbb6721 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(vec<4, f16>) -> vec<4, f16>
 fn tanh_e8efb3() {
-  var res: vec4<f16> = tanh(vec4<f16>(f16()));
+  var res: vec4<f16> = tanh(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.dxc.hlsl
index 547e3c1..6af0a2f 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_e8efb3() {
-  vector<float16_t, 4> res = tanh((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = tanh((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.glsl
index 7d9bf91..040f77b 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_e8efb3() {
-  f16vec4 res = tanh(f16vec4(0.0hf));
+  f16vec4 res = tanh(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void tanh_e8efb3() {
-  f16vec4 res = tanh(f16vec4(0.0hf));
+  f16vec4 res = tanh(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_e8efb3() {
-  f16vec4 res = tanh(f16vec4(0.0hf));
+  f16vec4 res = tanh(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.msl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.msl
index 7da14aa..1d1ac71 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_e8efb3() {
-  half4 res = tanh(half4(0.0h));
+  half4 res = tanh(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.spvasm
index 4b18be4..230071b 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_e8efb3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Tanh %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Tanh %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %tanh_e8efb3
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tanh_e8efb3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %tanh_e8efb3
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tanh_e8efb3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %tanh_e8efb3
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tanh_e8efb3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.wgsl
index 5cde1f8..72600d8 100644
--- a/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/tanh/e8efb3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_e8efb3() {
-  var res : vec4<f16> = tanh(vec4<f16>(f16()));
+  var res : vec4<f16> = tanh(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl
index a413e2b..53a99be 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<3, 3, f16>) -> mat<3, 3, f16>
 fn transpose_06794e() {
-  var res: mat3x3<f16> = transpose(mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat3x3<f16> = transpose(mat3x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.dxc.hlsl
index 134ef42..d9407ce 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_06794e() {
-  matrix<float16_t, 3, 3> res = transpose(matrix<float16_t, 3, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx));
+  matrix<float16_t, 3, 3> res = transpose(matrix<float16_t, 3, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.glsl
index 045b737..a860488 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_06794e() {
-  f16mat3 res = transpose(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3 res = transpose(f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_06794e() {
-  f16mat3 res = transpose(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3 res = transpose(f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_06794e() {
-  f16mat3 res = transpose(f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3 res = transpose(f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.msl
index e698039..1a1def4 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_06794e() {
-  half3x3 res = transpose(half3x3(half3(0.0h), half3(0.0h), half3(0.0h)));
+  half3x3 res = transpose(half3x3(half3(1.0h), half3(1.0h), half3(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.spvasm
index 26c14aa..7c401d5 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,39 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
  %mat3v3half = OpTypeMatrix %v3half 3
-         %17 = OpConstantNull %mat3v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %19 = OpConstantComposite %mat3v3half %18 %18 %18
 %_ptr_Function_mat3v3half = OpTypePointer Function %mat3v3half
-         %20 = OpTypeFunction %v4float
+         %22 = OpConstantNull %mat3v3half
+         %23 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_06794e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat3v3half Function %17
-         %13 = OpTranspose %mat3v3half %17
+        %res = OpVariable %_ptr_Function_mat3v3half Function %22
+         %13 = OpTranspose %mat3v3half %19
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %transpose_06794e
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %transpose_06794e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %29
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %transpose_06794e
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %transpose_06794e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_06794e
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %transpose_06794e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.wgsl
index ac99ba2..b1ba096 100644
--- a/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/06794e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_06794e() {
-  var res : mat3x3<f16> = transpose(mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat3x3<f16> = transpose(mat3x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl
index dd1c459..ca694d5 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<4, 2, f16>) -> mat<2, 4, f16>
 fn transpose_5edd96() {
-  var res: mat2x4<f16> = transpose(mat4x2<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat2x4<f16> = transpose(mat4x2<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.dxc.hlsl
index 1f253b9..3c9585c 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_5edd96() {
-  matrix<float16_t, 2, 4> res = transpose(matrix<float16_t, 4, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx));
+  matrix<float16_t, 2, 4> res = transpose(matrix<float16_t, 4, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.glsl
index 48b8ac1..d0deba2 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5edd96() {
-  f16mat2x4 res = transpose(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2x4 res = transpose(f16mat4x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_5edd96() {
-  f16mat2x4 res = transpose(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2x4 res = transpose(f16mat4x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5edd96() {
-  f16mat2x4 res = transpose(f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2x4 res = transpose(f16mat4x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.msl
index 09cffcb..538c05a 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_5edd96() {
-  half2x4 res = transpose(half4x2(half2(0.0h), half2(0.0h), half2(0.0h), half2(0.0h)));
+  half2x4 res = transpose(half4x2(half2(1.0h), half2(1.0h), half2(1.0h), half2(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.spvasm
index 07e8594..c85cda1 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,37 +39,39 @@
  %mat2v4half = OpTypeMatrix %v4half 2
      %v2half = OpTypeVector %half 2
  %mat4v2half = OpTypeMatrix %v2half 4
-         %19 = OpConstantNull %mat4v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %20 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %21 = OpConstantComposite %mat4v2half %20 %20 %20 %20
 %_ptr_Function_mat2v4half = OpTypePointer Function %mat2v4half
-         %22 = OpConstantNull %mat2v4half
-         %23 = OpTypeFunction %v4float
+         %24 = OpConstantNull %mat2v4half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_5edd96 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat2v4half Function %22
-         %13 = OpTranspose %mat2v4half %19
+        %res = OpVariable %_ptr_Function_mat2v4half Function %24
+         %13 = OpTranspose %mat2v4half %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %transpose_5edd96
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_5edd96
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_5edd96
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_5edd96
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_5edd96
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_5edd96
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.wgsl
index aaf9fbf..3edbfa2 100644
--- a/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/5edd96.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_5edd96() {
-  var res : mat2x4<f16> = transpose(mat4x2<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat2x4<f16> = transpose(mat4x2<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl
index 47e4c77..f5992a4 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<4, 3, f16>) -> mat<3, 4, f16>
 fn transpose_5f36bf() {
-  var res: mat3x4<f16> = transpose(mat4x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat3x4<f16> = transpose(mat4x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.dxc.hlsl
index b518924..cda6242 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_5f36bf() {
-  matrix<float16_t, 3, 4> res = transpose(matrix<float16_t, 4, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx));
+  matrix<float16_t, 3, 4> res = transpose(matrix<float16_t, 4, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.glsl
index bc4a794..6aba0b9 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5f36bf() {
-  f16mat3x4 res = transpose(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3x4 res = transpose(f16mat4x3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_5f36bf() {
-  f16mat3x4 res = transpose(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3x4 res = transpose(f16mat4x3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5f36bf() {
-  f16mat3x4 res = transpose(f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3x4 res = transpose(f16mat4x3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.msl
index d931f01..0545295 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_5f36bf() {
-  half3x4 res = transpose(half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h)));
+  half3x4 res = transpose(half4x3(half3(1.0h), half3(1.0h), half3(1.0h), half3(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.spvasm
index c9e6ffa..1283679 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,37 +39,39 @@
  %mat3v4half = OpTypeMatrix %v4half 3
      %v3half = OpTypeVector %half 3
  %mat4v3half = OpTypeMatrix %v3half 4
-         %19 = OpConstantNull %mat4v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %20 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %21 = OpConstantComposite %mat4v3half %20 %20 %20 %20
 %_ptr_Function_mat3v4half = OpTypePointer Function %mat3v4half
-         %22 = OpConstantNull %mat3v4half
-         %23 = OpTypeFunction %v4float
+         %24 = OpConstantNull %mat3v4half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_5f36bf = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat3v4half Function %22
-         %13 = OpTranspose %mat3v4half %19
+        %res = OpVariable %_ptr_Function_mat3v4half Function %24
+         %13 = OpTranspose %mat3v4half %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %transpose_5f36bf
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_5f36bf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_5f36bf
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_5f36bf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_5f36bf
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_5f36bf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.wgsl
index 878b15a..374302e 100644
--- a/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/5f36bf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_5f36bf() {
-  var res : mat3x4<f16> = transpose(mat4x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat3x4<f16> = transpose(mat4x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl
index 5a59b3b..bd62bb3 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<2, 2, f16>) -> mat<2, 2, f16>
 fn transpose_7be8b2() {
-  var res: mat2x2<f16> = transpose(mat2x2<f16>(f16(), f16(), f16(), f16()));
+  var res: mat2x2<f16> = transpose(mat2x2<f16>(1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.dxc.hlsl
index e72e2d0..cfa9885 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_7be8b2() {
-  matrix<float16_t, 2, 2> res = transpose(matrix<float16_t, 2, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx));
+  matrix<float16_t, 2, 2> res = transpose(matrix<float16_t, 2, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.glsl
index 44cafb6..1d16a91 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_7be8b2() {
-  f16mat2 res = transpose(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2 res = transpose(f16mat2(f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_7be8b2() {
-  f16mat2 res = transpose(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2 res = transpose(f16mat2(f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_7be8b2() {
-  f16mat2 res = transpose(f16mat2(f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2 res = transpose(f16mat2(f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.msl
index 435d12f..68fc99b 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_7be8b2() {
-  half2x2 res = transpose(half2x2(half2(0.0h), half2(0.0h)));
+  half2x2 res = transpose(half2x2(half2(1.0h), half2(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.spvasm
index 7575dca..8c0e82a 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,39 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
  %mat2v2half = OpTypeMatrix %v2half 2
-         %17 = OpConstantNull %mat2v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %19 = OpConstantComposite %mat2v2half %18 %18
 %_ptr_Function_mat2v2half = OpTypePointer Function %mat2v2half
-         %20 = OpTypeFunction %v4float
+         %22 = OpConstantNull %mat2v2half
+         %23 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_7be8b2 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat2v2half Function %17
-         %13 = OpTranspose %mat2v2half %17
+        %res = OpVariable %_ptr_Function_mat2v2half Function %22
+         %13 = OpTranspose %mat2v2half %19
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %transpose_7be8b2
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %transpose_7be8b2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %29
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %transpose_7be8b2
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %transpose_7be8b2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_7be8b2
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %transpose_7be8b2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.wgsl
index 437f1ce..9b4281f 100644
--- a/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/7be8b2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_7be8b2() {
-  var res : mat2x2<f16> = transpose(mat2x2<f16>(f16(), f16(), f16(), f16()));
+  var res : mat2x2<f16> = transpose(mat2x2<f16>(1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl b/test/tint/builtins/gen/literal/transpose/844869.wgsl
index 870582b..0548c1b 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<4, 4, f16>) -> mat<4, 4, f16>
 fn transpose_844869() {
-  var res: mat4x4<f16> = transpose(mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat4x4<f16> = transpose(mat4x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.dxc.hlsl
index 0ad869b..f1af6cb 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_844869() {
-  matrix<float16_t, 4, 4> res = transpose(matrix<float16_t, 4, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx));
+  matrix<float16_t, 4, 4> res = transpose(matrix<float16_t, 4, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.glsl
index a244d66..46d711b 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_844869() {
-  f16mat4 res = transpose(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4 res = transpose(f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_844869() {
-  f16mat4 res = transpose(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4 res = transpose(f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_844869() {
-  f16mat4 res = transpose(f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4 res = transpose(f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.msl
index b02ce13..0b18d45 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_844869() {
-  half4x4 res = transpose(half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h)));
+  half4x4 res = transpose(half4x4(half4(1.0h), half4(1.0h), half4(1.0h), half4(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.spvasm
index 8308419..342309f 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 37
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,39 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
  %mat4v4half = OpTypeMatrix %v4half 4
-         %17 = OpConstantNull %mat4v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %19 = OpConstantComposite %mat4v4half %18 %18 %18 %18
 %_ptr_Function_mat4v4half = OpTypePointer Function %mat4v4half
-         %20 = OpTypeFunction %v4float
+         %22 = OpConstantNull %mat4v4half
+         %23 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_844869 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat4v4half Function %17
-         %13 = OpTranspose %mat4v4half %17
+        %res = OpVariable %_ptr_Function_mat4v4half Function %22
+         %13 = OpTranspose %mat4v4half %19
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %transpose_844869
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %transpose_844869
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %29
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %transpose_844869
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %transpose_844869
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_844869
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %transpose_844869
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.wgsl
index b917ed4..8f36149 100644
--- a/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/844869.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_844869() {
-  var res : mat4x4<f16> = transpose(mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat4x4<f16> = transpose(mat4x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl
index e792547..b755bbd 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<3, 4, f16>) -> mat<4, 3, f16>
 fn transpose_8c06ce() {
-  var res: mat4x3<f16> = transpose(mat3x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat4x3<f16> = transpose(mat3x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.dxc.hlsl
index 7962142..d0ed0a2 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_8c06ce() {
-  matrix<float16_t, 4, 3> res = transpose(matrix<float16_t, 3, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx));
+  matrix<float16_t, 4, 3> res = transpose(matrix<float16_t, 3, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.glsl
index 77ffe38..aebf782 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_8c06ce() {
-  f16mat4x3 res = transpose(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4x3 res = transpose(f16mat3x4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_8c06ce() {
-  f16mat4x3 res = transpose(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4x3 res = transpose(f16mat3x4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_8c06ce() {
-  f16mat4x3 res = transpose(f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4x3 res = transpose(f16mat3x4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.msl
index dd48f03..1b191a2 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_8c06ce() {
-  half4x3 res = transpose(half3x4(half4(0.0h), half4(0.0h), half4(0.0h)));
+  half4x3 res = transpose(half3x4(half4(1.0h), half4(1.0h), half4(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.spvasm
index 04c004e..2f35c48 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,37 +39,39 @@
  %mat4v3half = OpTypeMatrix %v3half 4
      %v4half = OpTypeVector %half 4
  %mat3v4half = OpTypeMatrix %v4half 3
-         %19 = OpConstantNull %mat3v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %20 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %21 = OpConstantComposite %mat3v4half %20 %20 %20
 %_ptr_Function_mat4v3half = OpTypePointer Function %mat4v3half
-         %22 = OpConstantNull %mat4v3half
-         %23 = OpTypeFunction %v4float
+         %24 = OpConstantNull %mat4v3half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_8c06ce = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat4v3half Function %22
-         %13 = OpTranspose %mat4v3half %19
+        %res = OpVariable %_ptr_Function_mat4v3half Function %24
+         %13 = OpTranspose %mat4v3half %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %transpose_8c06ce
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_8c06ce
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_8c06ce
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_8c06ce
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_8c06ce
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_8c06ce
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.wgsl
index 09d0c25..f2b4dc4 100644
--- a/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/8c06ce.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_8c06ce() {
-  var res : mat4x3<f16> = transpose(mat3x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat4x3<f16> = transpose(mat3x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl
index 7be77d2..d2e4c2b 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<3, 2, f16>) -> mat<2, 3, f16>
 fn transpose_b9ad1f() {
-  var res: mat2x3<f16> = transpose(mat3x2<f16>(f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat2x3<f16> = transpose(mat3x2<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.dxc.hlsl
index 97e3dcb..1d61c25 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_b9ad1f() {
-  matrix<float16_t, 2, 3> res = transpose(matrix<float16_t, 3, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx));
+  matrix<float16_t, 2, 3> res = transpose(matrix<float16_t, 3, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.glsl
index f549a0d..123e8c4 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_b9ad1f() {
-  f16mat2x3 res = transpose(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2x3 res = transpose(f16mat3x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_b9ad1f() {
-  f16mat2x3 res = transpose(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2x3 res = transpose(f16mat3x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_b9ad1f() {
-  f16mat2x3 res = transpose(f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf)));
+  f16mat2x3 res = transpose(f16mat3x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.msl
index 6fc6f1d..d449921 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_b9ad1f() {
-  half2x3 res = transpose(half3x2(half2(0.0h), half2(0.0h), half2(0.0h)));
+  half2x3 res = transpose(half3x2(half2(1.0h), half2(1.0h), half2(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.spvasm
index c3ed30e..19c2897 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,37 +39,39 @@
  %mat2v3half = OpTypeMatrix %v3half 2
      %v2half = OpTypeVector %half 2
  %mat3v2half = OpTypeMatrix %v2half 3
-         %19 = OpConstantNull %mat3v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %20 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %21 = OpConstantComposite %mat3v2half %20 %20 %20
 %_ptr_Function_mat2v3half = OpTypePointer Function %mat2v3half
-         %22 = OpConstantNull %mat2v3half
-         %23 = OpTypeFunction %v4float
+         %24 = OpConstantNull %mat2v3half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_b9ad1f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat2v3half Function %22
-         %13 = OpTranspose %mat2v3half %19
+        %res = OpVariable %_ptr_Function_mat2v3half Function %24
+         %13 = OpTranspose %mat2v3half %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %transpose_b9ad1f
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_b9ad1f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_b9ad1f
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_b9ad1f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_b9ad1f
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_b9ad1f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.wgsl
index 49ee3fa..3d06432 100644
--- a/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/b9ad1f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_b9ad1f() {
-  var res : mat2x3<f16> = transpose(mat3x2<f16>(f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat2x3<f16> = transpose(mat3x2<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl
index 4375de3..ebaa669 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<2, 3, f16>) -> mat<3, 2, f16>
 fn transpose_d6faec() {
-  var res: mat3x2<f16> = transpose(mat2x3<f16>(f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat3x2<f16> = transpose(mat2x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.dxc.hlsl
index 4ab9a4a..4baafb0 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_d6faec() {
-  matrix<float16_t, 3, 2> res = transpose(matrix<float16_t, 2, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx));
+  matrix<float16_t, 3, 2> res = transpose(matrix<float16_t, 2, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.glsl
index c7f7f4b..3712491 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_d6faec() {
-  f16mat3x2 res = transpose(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3x2 res = transpose(f16mat2x3(f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_d6faec() {
-  f16mat3x2 res = transpose(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3x2 res = transpose(f16mat2x3(f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_d6faec() {
-  f16mat3x2 res = transpose(f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf)));
+  f16mat3x2 res = transpose(f16mat2x3(f16vec3(1.0hf), f16vec3(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.msl
index b4629d5..b30b952 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_d6faec() {
-  half3x2 res = transpose(half2x3(half3(0.0h), half3(0.0h)));
+  half3x2 res = transpose(half2x3(half3(1.0h), half3(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.spvasm
index a9f192c..cbbfc9b 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,37 +39,39 @@
  %mat3v2half = OpTypeMatrix %v2half 3
      %v3half = OpTypeVector %half 3
  %mat2v3half = OpTypeMatrix %v3half 2
-         %19 = OpConstantNull %mat2v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %20 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %21 = OpConstantComposite %mat2v3half %20 %20
 %_ptr_Function_mat3v2half = OpTypePointer Function %mat3v2half
-         %22 = OpConstantNull %mat3v2half
-         %23 = OpTypeFunction %v4float
+         %24 = OpConstantNull %mat3v2half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_d6faec = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat3v2half Function %22
-         %13 = OpTranspose %mat3v2half %19
+        %res = OpVariable %_ptr_Function_mat3v2half Function %24
+         %13 = OpTranspose %mat3v2half %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %transpose_d6faec
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_d6faec
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_d6faec
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_d6faec
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_d6faec
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_d6faec
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.wgsl
index 5e26944..2bf363a 100644
--- a/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/d6faec.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_d6faec() {
-  var res : mat3x2<f16> = transpose(mat2x3<f16>(f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat3x2<f16> = transpose(mat2x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl
index 706d3bd..71346b0 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<2, 4, f16>) -> mat<4, 2, f16>
 fn transpose_faeb05() {
-  var res: mat4x2<f16> = transpose(mat2x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res: mat4x2<f16> = transpose(mat2x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.dxc.hlsl
index 2a44dc6..3b78a5a 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_faeb05() {
-  matrix<float16_t, 4, 2> res = transpose(matrix<float16_t, 2, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx));
+  matrix<float16_t, 4, 2> res = transpose(matrix<float16_t, 2, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.glsl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.glsl
index 720b3fd..e382231 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_faeb05() {
-  f16mat4x2 res = transpose(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4x2 res = transpose(f16mat2x4(f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void transpose_faeb05() {
-  f16mat4x2 res = transpose(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4x2 res = transpose(f16mat2x4(f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_faeb05() {
-  f16mat4x2 res = transpose(f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf)));
+  f16mat4x2 res = transpose(f16mat2x4(f16vec4(1.0hf), f16vec4(1.0hf)));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.msl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.msl
index ec6e27d..e4e8470 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_faeb05() {
-  half4x2 res = transpose(half2x4(half4(0.0h), half4(0.0h)));
+  half4x2 res = transpose(half2x4(half4(1.0h), half4(1.0h)));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.spvasm
index eff9828..50f0184 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,37 +39,39 @@
  %mat4v2half = OpTypeMatrix %v2half 4
      %v4half = OpTypeVector %half 4
  %mat2v4half = OpTypeMatrix %v4half 2
-         %19 = OpConstantNull %mat2v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %20 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %21 = OpConstantComposite %mat2v4half %20 %20
 %_ptr_Function_mat4v2half = OpTypePointer Function %mat4v2half
-         %22 = OpConstantNull %mat4v2half
-         %23 = OpTypeFunction %v4float
+         %24 = OpConstantNull %mat4v2half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_faeb05 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_mat4v2half Function %22
-         %13 = OpTranspose %mat4v2half %19
+        %res = OpVariable %_ptr_Function_mat4v2half Function %24
+         %13 = OpTranspose %mat4v2half %21
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %transpose_faeb05
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_faeb05
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %transpose_faeb05
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_faeb05
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_faeb05
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_faeb05
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.wgsl
index 795686f..364abc3 100644
--- a/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/transpose/faeb05.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_faeb05() {
-  var res : mat4x2<f16> = transpose(mat2x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16()));
+  var res : mat4x2<f16> = transpose(mat2x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl
index 6874719..5a2495e 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(vec<3, f16>) -> vec<3, f16>
 fn trunc_103ab8() {
-  var res: vec3<f16> = trunc(vec3<f16>(f16()));
+  var res: vec3<f16> = trunc(vec3<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.dxc.hlsl
index dd3ebec..ffe1f6e 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_103ab8() {
-  vector<float16_t, 3> res = trunc((float16_t(0.0h)).xxx);
+  vector<float16_t, 3> res = trunc((float16_t(1.0h)).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.glsl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.glsl
index da7798a..946f9f3 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_103ab8() {
-  f16vec3 res = trunc(f16vec3(0.0hf));
+  f16vec3 res = trunc(f16vec3(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void trunc_103ab8() {
-  f16vec3 res = trunc(f16vec3(0.0hf));
+  f16vec3 res = trunc(f16vec3(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_103ab8() {
-  f16vec3 res = trunc(f16vec3(0.0hf));
+  f16vec3 res = trunc(f16vec3(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.msl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.msl
index 1121743..247d36c 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_103ab8() {
-  half3 res = trunc(half3(0.0h));
+  half3 res = trunc(half3(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.spvasm
index e1a21cf..537ed0be 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %17 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v3half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_103ab8 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3half Function %17
-         %13 = OpExtInst %v3half %16 Trunc %17
+        %res = OpVariable %_ptr_Function_v3half Function %21
+         %13 = OpExtInst %v3half %16 Trunc %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %trunc_103ab8
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %trunc_103ab8
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %trunc_103ab8
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %trunc_103ab8
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %trunc_103ab8
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %trunc_103ab8
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.wgsl
index 9422358..260b7fa 100644
--- a/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/103ab8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_103ab8() {
-  var res : vec3<f16> = trunc(vec3<f16>(f16()));
+  var res : vec3<f16> = trunc(vec3<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl
index ef8b02b..51ea764 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(vec<2, f16>) -> vec<2, f16>
 fn trunc_a56109() {
-  var res: vec2<f16> = trunc(vec2<f16>(f16()));
+  var res: vec2<f16> = trunc(vec2<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.dxc.hlsl
index 0cc0eb2..ed119b9 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_a56109() {
-  vector<float16_t, 2> res = trunc((float16_t(0.0h)).xx);
+  vector<float16_t, 2> res = trunc((float16_t(1.0h)).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.glsl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.glsl
index d403886..30a7a09 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_a56109() {
-  f16vec2 res = trunc(f16vec2(0.0hf));
+  f16vec2 res = trunc(f16vec2(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void trunc_a56109() {
-  f16vec2 res = trunc(f16vec2(0.0hf));
+  f16vec2 res = trunc(f16vec2(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_a56109() {
-  f16vec2 res = trunc(f16vec2(0.0hf));
+  f16vec2 res = trunc(f16vec2(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.msl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.msl
index 19d67d9..01e9266 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_a56109() {
-  half2 res = trunc(half2(0.0h));
+  half2 res = trunc(half2(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.spvasm
index 5899e0f..1dc8bf3 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %17 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v2half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_a56109 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2half Function %17
-         %13 = OpExtInst %v2half %16 Trunc %17
+        %res = OpVariable %_ptr_Function_v2half Function %21
+         %13 = OpExtInst %v2half %16 Trunc %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %trunc_a56109
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %trunc_a56109
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %trunc_a56109
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %trunc_a56109
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %trunc_a56109
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %trunc_a56109
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.wgsl
index 174127e..7051d16 100644
--- a/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/a56109.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_a56109() {
-  var res : vec2<f16> = trunc(vec2<f16>(f16()));
+  var res : vec2<f16> = trunc(vec2<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl
index 0dccaa6..32f443a 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(f16) -> f16
 fn trunc_cc2b0d() {
-  var res: f16 = trunc(f16());
+  var res: f16 = trunc(1.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.dxc.hlsl
index b268816..92d0f9d 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_cc2b0d() {
-  float16_t res = trunc(float16_t(0.0h));
+  float16_t res = trunc(float16_t(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.glsl
index 257a571..00e8be0 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_cc2b0d() {
-  float16_t res = trunc(0.0hf);
+  float16_t res = trunc(1.0hf);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void trunc_cc2b0d() {
-  float16_t res = trunc(0.0hf);
+  float16_t res = trunc(1.0hf);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_cc2b0d() {
-  float16_t res = trunc(0.0hf);
+  float16_t res = trunc(1.0hf);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.msl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.msl
index b2c50aa..785962c 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_cc2b0d() {
-  half res = trunc(0.0h);
+  half res = trunc(1.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.spvasm
index 49a49a20..71302f5 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -36,36 +36,37 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %16 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpTypeFunction %v4float
+         %19 = OpConstantNull %half
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_cc2b0d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %16
-         %13 = OpExtInst %half %15 Trunc %16
+        %res = OpVariable %_ptr_Function_half Function %19
+         %13 = OpExtInst %half %15 Trunc %half_0x1p_0
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %trunc_cc2b0d
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %trunc_cc2b0d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %trunc_cc2b0d
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %trunc_cc2b0d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %trunc_cc2b0d
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %trunc_cc2b0d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.wgsl
index a20cd36..6963297 100644
--- a/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/cc2b0d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_cc2b0d() {
-  var res : f16 = trunc(f16());
+  var res : f16 = trunc(1.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl
index bae66be..bbc6432 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(vec<4, f16>) -> vec<4, f16>
 fn trunc_ce7c17() {
-  var res: vec4<f16> = trunc(vec4<f16>(f16()));
+  var res: vec4<f16> = trunc(vec4<f16>(1.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.dxc.hlsl
index 83e63a1..3d1afee 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_ce7c17() {
-  vector<float16_t, 4> res = trunc((float16_t(0.0h)).xxxx);
+  vector<float16_t, 4> res = trunc((float16_t(1.0h)).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.glsl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.glsl
index 1ab86a5..751a5a1 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_ce7c17() {
-  f16vec4 res = trunc(f16vec4(0.0hf));
+  f16vec4 res = trunc(f16vec4(1.0hf));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void trunc_ce7c17() {
-  f16vec4 res = trunc(f16vec4(0.0hf));
+  f16vec4 res = trunc(f16vec4(1.0hf));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_ce7c17() {
-  f16vec4 res = trunc(f16vec4(0.0hf));
+  f16vec4 res = trunc(f16vec4(1.0hf));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.msl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.msl
index bbb5f1e..2676f2e 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_ce7c17() {
-  half4 res = trunc(half4(0.0h));
+  half4 res = trunc(half4(1.0h));
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.spvasm
index 2eecaa2..67233c5 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -37,36 +37,38 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %17 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %20 = OpTypeFunction %v4float
+         %21 = OpConstantNull %v4half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_ce7c17 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4half Function %17
-         %13 = OpExtInst %v4half %16 Trunc %17
+        %res = OpVariable %_ptr_Function_v4half Function %21
+         %13 = OpExtInst %v4half %16 Trunc %18
                OpStore %res %13
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %trunc_ce7c17
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %trunc_ce7c17
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %trunc_ce7c17
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %trunc_ce7c17
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %trunc_ce7c17
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %trunc_ce7c17
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.wgsl
index 0004a8c..2f491ed 100644
--- a/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/trunc/ce7c17.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_ce7c17() {
-  var res : vec4<f16> = trunc(vec4<f16>(f16()));
+  var res : vec4<f16> = trunc(vec4<f16>(1.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl b/test/tint/builtins/gen/var/abs/421ca3.wgsl
index c5557d3..a035251 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(vec<3, f16>) -> vec<3, f16>
 fn abs_421ca3() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.dxc.hlsl
index cd5239b..3154eb2 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_421ca3() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.glsl
index 8ddae5f..88d0689 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_421ca3() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = abs(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void abs_421ca3() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = abs(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_421ca3() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.msl
index e40c3ac..798b96e 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_421ca3() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.spvasm
index 1f1be0a..3e44894 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_421ca3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 FAbs %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 FAbs %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %abs_421ca3
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %abs_421ca3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %abs_421ca3
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %abs_421ca3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %abs_421ca3
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %abs_421ca3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.wgsl
index 7d15e4a..9835002 100644
--- a/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/421ca3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_421ca3() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl b/test/tint/builtins/gen/var/abs/538d29.wgsl
index 333532f..8537d25 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(vec<4, f16>) -> vec<4, f16>
 fn abs_538d29() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.dxc.hlsl
index 99a9860..f22efbc 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_538d29() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.glsl
index 10d37e7..48fa2e3 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_538d29() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = abs(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void abs_538d29() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = abs(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_538d29() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.msl
index 3c8d74a..09b242b 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_538d29() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.spvasm
index 777bcc2..dad09f3 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_538d29 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 FAbs %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 FAbs %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %abs_538d29
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %abs_538d29
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %abs_538d29
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %abs_538d29
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %abs_538d29
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %abs_538d29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.wgsl
index e7749f1..4fe6e8e 100644
--- a/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/538d29.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_538d29() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl
index 19384bc..470e133 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(vec<2, f16>) -> vec<2, f16>
 fn abs_5ae4fe() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.dxc.hlsl
index eb119af..326415e 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_5ae4fe() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.glsl
index 38a613d..65938a3 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_5ae4fe() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = abs(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void abs_5ae4fe() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = abs(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_5ae4fe() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.msl
index 2a223eb..965d1c9 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_5ae4fe() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.spvasm
index 451a932..297ad45 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_5ae4fe = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 FAbs %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 FAbs %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %abs_5ae4fe
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %abs_5ae4fe
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %abs_5ae4fe
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %abs_5ae4fe
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %abs_5ae4fe
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %abs_5ae4fe
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.wgsl
index fe5cd69..31475e6 100644
--- a/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/5ae4fe.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_5ae4fe() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl b/test/tint/builtins/gen/var/abs/fd247f.wgsl
index a347b41..eddb271 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl
@@ -25,7 +25,7 @@
 
 // fn abs(f16) -> f16
 fn abs_fd247f() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.dxc.hlsl
index 94ac0c5..b5f616a 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_fd247f() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.glsl
index 704f3ef..2310d41 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_fd247f() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = abs(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void abs_fd247f() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = abs(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void abs_fd247f() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.msl
index 0090547..41c1bdc 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_fd247f() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.spvasm
index 7594c69..20cfa7c 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %abs_fd247f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 FAbs %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 FAbs %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %abs_fd247f
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %abs_fd247f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_fd247f
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %abs_fd247f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %abs_fd247f
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %abs_fd247f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.wgsl
index 99d265c..0bf843a 100644
--- a/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/fd247f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn abs_fd247f() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl b/test/tint/builtins/gen/var/acos/004aff.wgsl
index a414dbc..a9301ff 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(vec<2, f16>) -> vec<2, f16>
 fn acos_004aff() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(0.96891242171h);
   var res: vec2<f16> = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.dxc.hlsl
index 46a0caf..069aa4e 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_004aff() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(0.96875h)).xx;
   vector<float16_t, 2> res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.glsl b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.glsl
index 1b33ea1..bfd00d5 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_004aff() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.96875hf);
   f16vec2 res = acos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void acos_004aff() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.96875hf);
   f16vec2 res = acos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_004aff() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.96875hf);
   f16vec2 res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.msl b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.msl
index c5a6e763..f4fe636 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_004aff() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(0.96875h);
   half2 res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.spvasm
index b654c2f..a76aa23 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_fpn1 = OpConstant %half 0x1.fp-1
+         %16 = OpConstantComposite %v2half %half_0x1_fpn1 %half_0x1_fpn1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %acos_004aff = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Acos %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Acos %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %acos_004aff
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %acos_004aff
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %acos_004aff
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %acos_004aff
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %acos_004aff
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %acos_004aff
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.wgsl
index 9f2035b..0c0757f 100644
--- a/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acos/004aff.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_004aff() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(0.96875h);
   var res : vec2<f16> = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl b/test/tint/builtins/gen/var/acos/203628.wgsl
index 6ec10ba..190ed6b 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(vec<4, f16>) -> vec<4, f16>
 fn acos_203628() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(0.96891242171h);
   var res: vec4<f16> = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.dxc.hlsl
index b2c8911..0f78eff 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_203628() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(0.96875h)).xxxx;
   vector<float16_t, 4> res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.glsl b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.glsl
index fa94d0f..d02ae5f 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_203628() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.96875hf);
   f16vec4 res = acos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void acos_203628() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.96875hf);
   f16vec4 res = acos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_203628() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.96875hf);
   f16vec4 res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.msl b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.msl
index 9f35174..de37dfc 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_203628() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(0.96875h);
   half4 res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.spvasm
index 3069e9a..32f8934 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_fpn1 = OpConstant %half 0x1.fp-1
+         %16 = OpConstantComposite %v4half %half_0x1_fpn1 %half_0x1_fpn1 %half_0x1_fpn1 %half_0x1_fpn1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %acos_203628 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Acos %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Acos %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %acos_203628
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %acos_203628
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %acos_203628
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %acos_203628
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %acos_203628
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %acos_203628
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.wgsl
index 78fc613..7ae7a2f 100644
--- a/test/tint/builtins/gen/var/acos/203628.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acos/203628.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_203628() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(0.96875h);
   var res : vec4<f16> = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl b/test/tint/builtins/gen/var/acos/303e3d.wgsl
index 39290af..2ab53bf 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(f16) -> f16
 fn acos_303e3d() {
-  var arg_0 = f16();
+  var arg_0 = 0.96891242171h;
   var res: f16 = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.dxc.hlsl
index dd39161..109dc17 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_303e3d() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(0.96875h);
   float16_t res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.glsl b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.glsl
index 5a6a3e3..aec686c 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_303e3d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.96875hf;
   float16_t res = acos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void acos_303e3d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.96875hf;
   float16_t res = acos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_303e3d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.96875hf;
   float16_t res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.msl b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.msl
index 05c4e64..7964861 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_303e3d() {
-  half arg_0 = 0.0h;
+  half arg_0 = 0.96875h;
   half res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.spvasm
index b915e0d..4f35f22 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_fpn1 = OpConstant %half 0x1.fp-1
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %acos_303e3d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Acos %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1_fpn1
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Acos %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %acos_303e3d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %acos_303e3d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %acos_303e3d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %acos_303e3d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %acos_303e3d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %acos_303e3d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.wgsl
index e91cf5b..624382b 100644
--- a/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acos/303e3d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_303e3d() {
-  var arg_0 = f16();
+  var arg_0 = 0.96875h;
   var res : f16 = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl b/test/tint/builtins/gen/var/acos/f47057.wgsl
index b1b2fe7..cdd663d 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl
@@ -25,7 +25,7 @@
 
 // fn acos(vec<3, f16>) -> vec<3, f16>
 fn acos_f47057() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(0.96891242171h);
   var res: vec3<f16> = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.dxc.hlsl
index 8f0fa43..55cf89b 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void acos_f47057() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(0.96875h)).xxx;
   vector<float16_t, 3> res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.glsl b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.glsl
index 67209db..1081143 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_f47057() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.96875hf);
   f16vec3 res = acos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void acos_f47057() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.96875hf);
   f16vec3 res = acos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void acos_f47057() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.96875hf);
   f16vec3 res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.msl b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.msl
index 376ae7e..f04f96e 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void acos_f47057() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(0.96875h);
   half3 res = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.spvasm
index dcfdc44..e36b728 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_fpn1 = OpConstant %half 0x1.fp-1
+         %16 = OpConstantComposite %v3half %half_0x1_fpn1 %half_0x1_fpn1 %half_0x1_fpn1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %acos_f47057 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Acos %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Acos %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %acos_f47057
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %acos_f47057
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %acos_f47057
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %acos_f47057
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %acos_f47057
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %acos_f47057
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.wgsl
index 5b55578..06677ee 100644
--- a/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acos/f47057.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acos_f47057() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(0.96875h);
   var res : vec3<f16> = acos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl
index d421a81..d0bb845 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(vec<2, f16>) -> vec<2, f16>
 fn acosh_5f49d8() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.dxc.hlsl
index d2768e7..f9ed815 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_5f49d8() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.glsl b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.glsl
index 033e902..c8b79d9 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_5f49d8() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_acosh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void acosh_5f49d8() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_acosh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void acosh_5f49d8() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.msl b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.msl
index b6ed0f0..e0ceb2d 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_5f49d8() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.spvasm
index bb409ff..b1a06da 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.spvasm
@@ -61,7 +61,7 @@
          %27 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v2half Function %21
         %res = OpVariable %_ptr_Function_v2half Function %21
-               OpStore %arg_0 %21
+               OpStore %arg_0 %17
          %31 = OpLoad %v2half %arg_0
          %30 = OpFunctionCall %v2half %tint_acosh %31
                OpStore %res %30
diff --git a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.wgsl
index 027ad72..278bf08 100644
--- a/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acosh/5f49d8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_5f49d8() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl
index 805b9fa..f2413b9 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(f16) -> f16
 fn acosh_a37dfe() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.dxc.hlsl
index 632b730..b017d33 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.glsl b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.glsl
index be2d5fe..d31bcbe 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_acosh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_acosh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void acosh_a37dfe() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.msl b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.msl
index 77aed14..954b35d 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_a37dfe() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.spvasm
index 1eede38..d30c5b9 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.spvasm
@@ -58,7 +58,7 @@
          %24 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_half Function %18
         %res = OpVariable %_ptr_Function_half Function %18
-               OpStore %arg_0 %18
+               OpStore %arg_0 %half_0x1p_0
          %28 = OpLoad %half %arg_0
          %27 = OpFunctionCall %half %tint_acosh %28
                OpStore %res %27
diff --git a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.wgsl
index c5a8436..dc6a048 100644
--- a/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acosh/a37dfe.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_a37dfe() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl b/test/tint/builtins/gen/var/acosh/de60d8.wgsl
index 06b3c4a..8b351e9 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(vec<4, f16>) -> vec<4, f16>
 fn acosh_de60d8() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.dxc.hlsl
index beda5f4..c7d2b72 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_de60d8() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.glsl b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.glsl
index b63ecb7..a9b1dc5 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_de60d8() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_acosh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void acosh_de60d8() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_acosh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void acosh_de60d8() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.msl b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.msl
index 0514328..b708a6f 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_de60d8() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.spvasm
index 10eef9f..2f876ab 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.spvasm
@@ -61,7 +61,7 @@
          %27 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v4half Function %21
         %res = OpVariable %_ptr_Function_v4half Function %21
-               OpStore %arg_0 %21
+               OpStore %arg_0 %17
          %31 = OpLoad %v4half %arg_0
          %30 = OpFunctionCall %v4half %tint_acosh %31
                OpStore %res %30
diff --git a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.wgsl
index d8a3b14..5cd6404 100644
--- a/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acosh/de60d8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_de60d8() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl b/test/tint/builtins/gen/var/acosh/f56574.wgsl
index b6e484a..f78069a 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl
@@ -25,7 +25,7 @@
 
 // fn acosh(vec<3, f16>) -> vec<3, f16>
 fn acosh_f56574() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.dxc.hlsl
index b89a6f9..4caefac 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void acosh_f56574() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.glsl b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.glsl
index a5e2a4d..380997b 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void acosh_f56574() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_acosh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void acosh_f56574() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_acosh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void acosh_f56574() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.msl b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.msl
index 7499b88..1715c27 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void acosh_f56574() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = tint_acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.spvasm b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.spvasm
index d818740..ee25e7a 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.spvasm
@@ -61,7 +61,7 @@
          %27 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v3half Function %21
         %res = OpVariable %_ptr_Function_v3half Function %21
-               OpStore %arg_0 %21
+               OpStore %arg_0 %17
          %31 = OpLoad %v3half %arg_0
          %30 = OpFunctionCall %v3half %tint_acosh %31
                OpStore %res %30
diff --git a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.wgsl b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.wgsl
index 8cbc4f6..c8cf166 100644
--- a/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/acosh/f56574.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn acosh_f56574() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = acosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl b/test/tint/builtins/gen/var/asin/11dfda.wgsl
index c9b2506..4e3eed7 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(f16) -> f16
 fn asin_11dfda() {
-  var arg_0 = f16();
+  var arg_0 = 0.479425538604h;
   var res: f16 = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.dxc.hlsl
index 10ac617..e34b3ab 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_11dfda() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(0.479248047h);
   float16_t res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.glsl b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.glsl
index 948c08d..4100486 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_11dfda() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.479248047hf;
   float16_t res = asin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asin_11dfda() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.479248047hf;
   float16_t res = asin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_11dfda() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.479248047hf;
   float16_t res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.msl b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.msl
index f59c879..785eafe 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_11dfda() {
-  half arg_0 = 0.0h;
+  half arg_0 = 0.479248047h;
   half res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.spvasm
index 2e6097a..c1fb650 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_eacpn2 = OpConstant %half 0x1.eacp-2
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_11dfda = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Asin %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1_eacpn2
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Asin %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %asin_11dfda
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %asin_11dfda
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asin_11dfda
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %asin_11dfda
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %asin_11dfda
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %asin_11dfda
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.wgsl
index abe2463..8e37925 100644
--- a/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asin/11dfda.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_11dfda() {
-  var arg_0 = f16();
+  var arg_0 = 0.479248047h;
   var res : f16 = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl b/test/tint/builtins/gen/var/asin/2d8e29.wgsl
index fdf613e..2aeaca0 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(vec<3, f16>) -> vec<3, f16>
 fn asin_2d8e29() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(0.479425538604h);
   var res: vec3<f16> = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.dxc.hlsl
index 4c22612..201463d 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_2d8e29() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(0.479248047h)).xxx;
   vector<float16_t, 3> res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.glsl b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.glsl
index e5c01ae..e554dff 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_2d8e29() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.479248047hf);
   f16vec3 res = asin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asin_2d8e29() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.479248047hf);
   f16vec3 res = asin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_2d8e29() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.479248047hf);
   f16vec3 res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.msl b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.msl
index efafdf5..d4e5c78 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_2d8e29() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(0.479248047h);
   half3 res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.spvasm
index 292429e..9882236 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_eacpn2 = OpConstant %half 0x1.eacp-2
+         %16 = OpConstantComposite %v3half %half_0x1_eacpn2 %half_0x1_eacpn2 %half_0x1_eacpn2
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_2d8e29 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Asin %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Asin %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %asin_2d8e29
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %asin_2d8e29
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %asin_2d8e29
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %asin_2d8e29
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %asin_2d8e29
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %asin_2d8e29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.wgsl
index c93cae1..fb3320d 100644
--- a/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asin/2d8e29.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_2d8e29() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(0.479248047h);
   var res : vec3<f16> = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl
index 022f69a..294f30c 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(vec<4, f16>) -> vec<4, f16>
 fn asin_3cfbd4() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(0.479425538604h);
   var res: vec4<f16> = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.dxc.hlsl
index a356558..0d3e91c 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_3cfbd4() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(0.479248047h)).xxxx;
   vector<float16_t, 4> res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.glsl b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.glsl
index 35f9bd9..d479eb7 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_3cfbd4() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.479248047hf);
   f16vec4 res = asin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asin_3cfbd4() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.479248047hf);
   f16vec4 res = asin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_3cfbd4() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.479248047hf);
   f16vec4 res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.msl b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.msl
index 394f485..c26ade5 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_3cfbd4() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(0.479248047h);
   half4 res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.spvasm
index 35e557c..6c6233d 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_eacpn2 = OpConstant %half 0x1.eacp-2
+         %16 = OpConstantComposite %v4half %half_0x1_eacpn2 %half_0x1_eacpn2 %half_0x1_eacpn2 %half_0x1_eacpn2
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_3cfbd4 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Asin %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Asin %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %asin_3cfbd4
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %asin_3cfbd4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %asin_3cfbd4
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %asin_3cfbd4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %asin_3cfbd4
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %asin_3cfbd4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.wgsl
index 91e42c6..0366545 100644
--- a/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asin/3cfbd4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_3cfbd4() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(0.479248047h);
   var res : vec4<f16> = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl b/test/tint/builtins/gen/var/asin/b4aced.wgsl
index f69143a..988db7b 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl
@@ -25,7 +25,7 @@
 
 // fn asin(vec<2, f16>) -> vec<2, f16>
 fn asin_b4aced() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(0.479425538604h);
   var res: vec2<f16> = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.dxc.hlsl
index 4d0043a..0613a31 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void asin_b4aced() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(0.479248047h)).xx;
   vector<float16_t, 2> res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.glsl b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.glsl
index 65fdee3..bb6ffad 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_b4aced() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.479248047hf);
   f16vec2 res = asin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asin_b4aced() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.479248047hf);
   f16vec2 res = asin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asin_b4aced() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.479248047hf);
   f16vec2 res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.msl b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.msl
index c2bab89..cdb23f6 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asin_b4aced() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(0.479248047h);
   half2 res = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.spvasm
index b11a782..d8048cc 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_eacpn2 = OpConstant %half 0x1.eacp-2
+         %16 = OpConstantComposite %v2half %half_0x1_eacpn2 %half_0x1_eacpn2
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asin_b4aced = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Asin %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Asin %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %asin_b4aced
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %asin_b4aced
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %asin_b4aced
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %asin_b4aced
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %asin_b4aced
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %asin_b4aced
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.wgsl
index 056003b..f493af6 100644
--- a/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asin/b4aced.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asin_b4aced() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(0.479248047h);
   var res : vec2<f16> = asin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl b/test/tint/builtins/gen/var/asinh/468a48.wgsl
index 6a2992f..8123cef 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(f16) -> f16
 fn asinh_468a48() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.dxc.hlsl
index bdeb8b8..42b918e 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void asinh_468a48() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = tint_sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.glsl b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.glsl
index 70eee10..3def2f9 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_468a48() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = asinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asinh_468a48() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = asinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_468a48() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.msl b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.msl
index 22a59d4..7851a46 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_468a48() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.spvasm
index 93c8f5a..827a8b4 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_468a48 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Asinh %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Asinh %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %asinh_468a48
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %asinh_468a48
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %asinh_468a48
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %asinh_468a48
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %asinh_468a48
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %asinh_468a48
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.wgsl
index b8b458c..9992ba4 100644
--- a/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/468a48.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_468a48() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl
index 1c73478..3fbf508 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(vec<4, f16>) -> vec<4, f16>
 fn asinh_95ab2b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.dxc.hlsl
index bbbe9f7..5d7141d 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void asinh_95ab2b() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = tint_sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.glsl b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.glsl
index ec6f916..2e9eee0 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_95ab2b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = asinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asinh_95ab2b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = asinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_95ab2b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.msl b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.msl
index ab99246..46212a1 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_95ab2b() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.spvasm
index cbaf25c..de21aad 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_95ab2b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Asinh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Asinh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %asinh_95ab2b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %asinh_95ab2b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %asinh_95ab2b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %asinh_95ab2b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %asinh_95ab2b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %asinh_95ab2b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.wgsl
index 882f15d..e67b086 100644
--- a/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/95ab2b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_95ab2b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl
index 6cc709d..f293ed8 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(vec<2, f16>) -> vec<2, f16>
 fn asinh_ad8f8b() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.dxc.hlsl
index 68d01e6..8013ceb 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void asinh_ad8f8b() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = tint_sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.glsl b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.glsl
index 2f66aaa..1186176 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_ad8f8b() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = asinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asinh_ad8f8b() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = asinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_ad8f8b() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.msl b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.msl
index 4a6745f..10e476a 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_ad8f8b() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.spvasm
index b41573f..12f4a4d 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_ad8f8b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Asinh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Asinh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %asinh_ad8f8b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %asinh_ad8f8b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %asinh_ad8f8b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %asinh_ad8f8b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %asinh_ad8f8b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %asinh_ad8f8b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.wgsl
index 2a96fe6..48b3931 100644
--- a/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/ad8f8b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_ad8f8b() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl
index 648ab73..cf01a22 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl
@@ -25,7 +25,7 @@
 
 // fn asinh(vec<3, f16>) -> vec<3, f16>
 fn asinh_fb5e8c() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.dxc.hlsl
index 2e127aa..8ab935d 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void asinh_fb5e8c() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = tint_sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.glsl b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.glsl
index bb5859f..6abfbda 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_fb5e8c() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = asinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void asinh_fb5e8c() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = asinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void asinh_fb5e8c() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.msl b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.msl
index 344f7c5..28621d0 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void asinh_fb5e8c() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.spvasm
index 63c34df..cfef693 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %asinh_fb5e8c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Asinh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Asinh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %asinh_fb5e8c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %asinh_fb5e8c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %asinh_fb5e8c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %asinh_fb5e8c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %asinh_fb5e8c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %asinh_fb5e8c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.wgsl
index c228108..98a75ea 100644
--- a/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/fb5e8c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn asinh_fb5e8c() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl b/test/tint/builtins/gen/var/atan/19faea.wgsl
index 14c20e9..a0e6e25 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(vec<4, f16>) -> vec<4, f16>
 fn atan_19faea() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.dxc.hlsl
index 557db58..0ee7b59 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_19faea() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.glsl
index 46811fc..c061757 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_19faea() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = atan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void atan_19faea() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = atan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_19faea() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.msl b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.msl
index f8d735b..9cdba27 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_19faea() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.spvasm
index 2daa3f6..eee05ac 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_19faea = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Atan %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Atan %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %atan_19faea
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %atan_19faea
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %atan_19faea
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %atan_19faea
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %atan_19faea
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %atan_19faea
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.wgsl
index d93bec7..4f67d35 100644
--- a/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/19faea.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_19faea() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl b/test/tint/builtins/gen/var/atan/1e1764.wgsl
index 2f5d3b9..0906855 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(vec<2, f16>) -> vec<2, f16>
 fn atan_1e1764() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.dxc.hlsl
index 6cb0a49..c9b4335 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_1e1764() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.glsl
index 8c16874..18121b6 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_1e1764() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = atan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void atan_1e1764() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = atan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_1e1764() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.msl b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.msl
index f7651c4..3e8f50d 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_1e1764() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.spvasm
index 0a1b7de..fcc60e5 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_1e1764 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Atan %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Atan %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %atan_1e1764
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %atan_1e1764
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %atan_1e1764
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %atan_1e1764
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %atan_1e1764
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %atan_1e1764
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.wgsl
index 86ba267..2f1424f 100644
--- a/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/1e1764.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_1e1764() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl b/test/tint/builtins/gen/var/atan/a5f421.wgsl
index c76fe4c..26f3358 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(vec<3, f16>) -> vec<3, f16>
 fn atan_a5f421() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.dxc.hlsl
index aca9149..880f20e 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_a5f421() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.glsl
index e4a545a..4560059 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a5f421() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = atan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void atan_a5f421() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = atan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a5f421() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.msl b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.msl
index 800084d..3951381 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_a5f421() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.spvasm
index c41d678..b620384 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_a5f421 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Atan %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Atan %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %atan_a5f421
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %atan_a5f421
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %atan_a5f421
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %atan_a5f421
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %atan_a5f421
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %atan_a5f421
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.wgsl
index 48d261a..f4230d0 100644
--- a/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/a5f421.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_a5f421() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl b/test/tint/builtins/gen/var/atan/a7ba61.wgsl
index a19eafc..53fd0e4 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl
@@ -25,7 +25,7 @@
 
 // fn atan(f16) -> f16
 fn atan_a7ba61() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.dxc.hlsl
index 2697f3e..3bcfc82 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void atan_a7ba61() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.glsl
index 4f7d41f..45344ff 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a7ba61() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = atan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void atan_a7ba61() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = atan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan_a7ba61() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.msl b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.msl
index 33674c9..7cefaec 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void atan_a7ba61() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.spvasm
index 2442909..42fe3bc 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan_a7ba61 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Atan %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Atan %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %atan_a7ba61
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %atan_a7ba61
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %atan_a7ba61
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %atan_a7ba61
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %atan_a7ba61
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %atan_a7ba61
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.wgsl
index 2237e13..cbd8a89 100644
--- a/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/a7ba61.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atan_a7ba61() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl b/test/tint/builtins/gen/var/atan2/21dfea.wgsl
index f45981b..636ca4a 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl
@@ -25,8 +25,8 @@
 
 // fn atan2(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn atan2_21dfea() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.dxc.hlsl
index 811f791..2e50bdd 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void atan2_21dfea() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.glsl
index e10e1d9..d5fdaa5 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_21dfea() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = atan(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void atan2_21dfea() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = atan(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_21dfea() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = atan(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.msl b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.msl
index 2ed4954..dc7e8bc 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void atan2_21dfea() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.spvasm
index 22b64b3..3fefd38 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_21dfea = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 Atan2 %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 Atan2 %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %atan2_21dfea
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %atan2_21dfea
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %atan2_21dfea
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %atan2_21dfea
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %atan2_21dfea
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %atan2_21dfea
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.wgsl
index e4c6b6b..0ab468d 100644
--- a/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/21dfea.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn atan2_21dfea() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl b/test/tint/builtins/gen/var/atan2/93febc.wgsl
index a09bf18..1b2c63b 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl
@@ -25,8 +25,8 @@
 
 // fn atan2(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn atan2_93febc() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: vec2<f16> = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.dxc.hlsl
index 780ec69..fa686ae 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void atan2_93febc() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.glsl
index 2184e82e..c46a5d1 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_93febc() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = atan(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void atan2_93febc() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = atan(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_93febc() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = atan(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.msl b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.msl
index 27e327d..4da1248 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void atan2_93febc() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half2 res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.spvasm
index bdcbc06..d9d1415 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_93febc = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %v2half %20 Atan2 %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %v2half %22 Atan2 %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %atan2_93febc
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %atan2_93febc
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %atan2_93febc
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %atan2_93febc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %atan2_93febc
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %atan2_93febc
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.wgsl
index 487d271..7516baa 100644
--- a/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/93febc.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn atan2_93febc() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : vec2<f16> = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl b/test/tint/builtins/gen/var/atan2/ca698e.wgsl
index e1c18bc..1cc112e 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl
@@ -25,8 +25,8 @@
 
 // fn atan2(f16, f16) -> f16
 fn atan2_ca698e() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var res: f16 = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.dxc.hlsl
index 0d5b1d9..4fd16b6 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void atan2_ca698e() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   float16_t res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.glsl
index 3db5c43..72dfcd9 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_ca698e() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = atan(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void atan2_ca698e() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = atan(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_ca698e() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = atan(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.msl b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.msl
index 575cd00..40641e9 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void atan2_ca698e() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   half res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.spvasm
index 01adb51..64133e1 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,42 +38,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_ca698e = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-         %20 = OpLoad %half %arg_0
-         %21 = OpLoad %half %arg_1
-         %18 = OpExtInst %half %19 Atan2 %20 %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %22 = OpLoad %half %arg_1
+         %19 = OpExtInst %half %20 Atan2 %21 %22
+               OpStore %res %19
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %atan2_ca698e
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %atan2_ca698e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %atan2_ca698e
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %atan2_ca698e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %atan2_ca698e
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %atan2_ca698e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.wgsl
index 1097b26..68eaa92 100644
--- a/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/ca698e.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn atan2_ca698e() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var res : f16 = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl b/test/tint/builtins/gen/var/atan2/d983ab.wgsl
index 2d87cea..b538cf8 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl
@@ -25,8 +25,8 @@
 
 // fn atan2(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn atan2_d983ab() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: vec4<f16> = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.dxc.hlsl
index 1e09843..50d70ea 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void atan2_d983ab() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.glsl b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.glsl
index 294b537..00eb85b 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_d983ab() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = atan(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void atan2_d983ab() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = atan(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void atan2_d983ab() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = atan(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.msl b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.msl
index 1f3cdbc..ff2c655 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void atan2_d983ab() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half4 res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.spvasm
index a8b43d8..5e8d617 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %atan2_d983ab = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %v4half %20 Atan2 %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %v4half %22 Atan2 %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %atan2_d983ab
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %atan2_d983ab
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %atan2_d983ab
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %atan2_d983ab
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %atan2_d983ab
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %atan2_d983ab
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.wgsl
index 8d7f937..b83cab2 100644
--- a/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/d983ab.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn atan2_d983ab() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : vec4<f16> = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl
index 9ad6f3f..7639019 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(vec<2, f16>) -> vec<2, f16>
 fn atanh_5bf88d() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(0.5h);
   var res: vec2<f16> = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.dxc.hlsl
index 50adf29..e3fc26b 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void atanh_5bf88d() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(0.5h)).xx;
   vector<float16_t, 2> res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.glsl b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.glsl
index d8e42b9..fb6f974 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void atanh_5bf88d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.5hf);
   f16vec2 res = tint_atanh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void atanh_5bf88d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.5hf);
   f16vec2 res = tint_atanh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void atanh_5bf88d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(0.5hf);
   f16vec2 res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.msl b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.msl
index 633f841..ffbe3da 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void atanh_5bf88d() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(0.5h);
   half2 res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.spvasm
index 55870bc..46a928a 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 49
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -46,8 +46,10 @@
          %21 = OpConstantNull %v2half
        %void = OpTypeVoid
          %24 = OpTypeFunction %void
+%half_0x1pn1 = OpConstant %half 0x1p-1
+         %29 = OpConstantComposite %v2half %half_0x1pn1 %half_0x1pn1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %33 = OpTypeFunction %v4float
+         %35 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tint_atanh = OpFunction %v2half None %9
           %x = OpFunctionParameter %v2half
@@ -61,31 +63,31 @@
          %27 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v2half Function %21
         %res = OpVariable %_ptr_Function_v2half Function %21
-               OpStore %arg_0 %21
-         %31 = OpLoad %v2half %arg_0
-         %30 = OpFunctionCall %v2half %tint_atanh %31
-               OpStore %res %30
+               OpStore %arg_0 %29
+         %33 = OpLoad %v2half %arg_0
+         %32 = OpFunctionCall %v2half %tint_atanh %33
+               OpStore %res %32
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %atanh_5bf88d
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %atanh_5bf88d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %24
-         %38 = OpLabel
-         %39 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %39
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %24
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %atanh_5bf88d
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %atanh_5bf88d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %24
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %atanh_5bf88d
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %atanh_5bf88d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.wgsl
index 3d38ee5..621b045 100644
--- a/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atanh/5bf88d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_5bf88d() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(0.5h);
   var res : vec2<f16> = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl
index bbe88cb..c2611e2 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(f16) -> f16
 fn atanh_d2d8cd() {
-  var arg_0 = f16();
+  var arg_0 = 0.5h;
   var res: f16 = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.dxc.hlsl
index bf8166a..1d7ad2a 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void atanh_d2d8cd() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(0.5h);
   float16_t res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.glsl b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.glsl
index d829f33..f06eec3 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void atanh_d2d8cd() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.5hf;
   float16_t res = tint_atanh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void atanh_d2d8cd() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.5hf;
   float16_t res = tint_atanh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void atanh_d2d8cd() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 0.5hf;
   float16_t res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.msl b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.msl
index d76fbdd..69a4fd9 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void atanh_d2d8cd() {
-  half arg_0 = 0.0h;
+  half arg_0 = 0.5h;
   half res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.spvasm
index 343b75f..45273a1 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -43,8 +43,9 @@
          %18 = OpConstantNull %half
        %void = OpTypeVoid
          %21 = OpTypeFunction %void
+%half_0x1pn1 = OpConstant %half 0x1p-1
 %_ptr_Function_half = OpTypePointer Function %half
-         %30 = OpTypeFunction %v4float
+         %31 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tint_atanh = OpFunction %half None %9
           %x = OpFunctionParameter %half
@@ -58,31 +59,31 @@
          %24 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_half Function %18
         %res = OpVariable %_ptr_Function_half Function %18
-               OpStore %arg_0 %18
-         %28 = OpLoad %half %arg_0
-         %27 = OpFunctionCall %half %tint_atanh %28
-               OpStore %res %27
+               OpStore %arg_0 %half_0x1pn1
+         %29 = OpLoad %half %arg_0
+         %28 = OpFunctionCall %half %tint_atanh %29
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %atanh_d2d8cd
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %atanh_d2d8cd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %21
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %21
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %atanh_d2d8cd
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %atanh_d2d8cd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %21
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %atanh_d2d8cd
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %atanh_d2d8cd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.wgsl
index f9720ab..c0e9513 100644
--- a/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atanh/d2d8cd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_d2d8cd() {
-  var arg_0 = f16();
+  var arg_0 = 0.5h;
   var res : f16 = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl b/test/tint/builtins/gen/var/atanh/e3b450.wgsl
index f1fa1f3..0c2cc85 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(vec<4, f16>) -> vec<4, f16>
 fn atanh_e3b450() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(0.5h);
   var res: vec4<f16> = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.dxc.hlsl
index e36b362..d597786 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void atanh_e3b450() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(0.5h)).xxxx;
   vector<float16_t, 4> res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.glsl b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.glsl
index 160e464..d8fb476 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void atanh_e3b450() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.5hf);
   f16vec4 res = tint_atanh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void atanh_e3b450() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.5hf);
   f16vec4 res = tint_atanh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void atanh_e3b450() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(0.5hf);
   f16vec4 res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.msl b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.msl
index 70237ec..be6587e 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void atanh_e3b450() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(0.5h);
   half4 res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.spvasm
index b284d66..28e9d79 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 49
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -46,8 +46,10 @@
          %21 = OpConstantNull %v4half
        %void = OpTypeVoid
          %24 = OpTypeFunction %void
+%half_0x1pn1 = OpConstant %half 0x1p-1
+         %29 = OpConstantComposite %v4half %half_0x1pn1 %half_0x1pn1 %half_0x1pn1 %half_0x1pn1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %33 = OpTypeFunction %v4float
+         %35 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tint_atanh = OpFunction %v4half None %9
           %x = OpFunctionParameter %v4half
@@ -61,31 +63,31 @@
          %27 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v4half Function %21
         %res = OpVariable %_ptr_Function_v4half Function %21
-               OpStore %arg_0 %21
-         %31 = OpLoad %v4half %arg_0
-         %30 = OpFunctionCall %v4half %tint_atanh %31
-               OpStore %res %30
+               OpStore %arg_0 %29
+         %33 = OpLoad %v4half %arg_0
+         %32 = OpFunctionCall %v4half %tint_atanh %33
+               OpStore %res %32
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %atanh_e3b450
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %atanh_e3b450
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %24
-         %38 = OpLabel
-         %39 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %39
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %24
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %atanh_e3b450
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %atanh_e3b450
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %24
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %atanh_e3b450
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %atanh_e3b450
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.wgsl
index c4fe719..fe06f7c 100644
--- a/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atanh/e3b450.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_e3b450() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(0.5h);
   var res : vec4<f16> = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl
index 57babed..cad022d 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl
@@ -25,7 +25,7 @@
 
 // fn atanh(vec<3, f16>) -> vec<3, f16>
 fn atanh_ec4b06() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(0.5h);
   var res: vec3<f16> = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.dxc.hlsl
index f59fe90..308519b 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void atanh_ec4b06() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(0.5h)).xxx;
   vector<float16_t, 3> res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.glsl b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.glsl
index 13d4a41..7a85673 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void atanh_ec4b06() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.5hf);
   f16vec3 res = tint_atanh(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void atanh_ec4b06() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.5hf);
   f16vec3 res = tint_atanh(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void atanh_ec4b06() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(0.5hf);
   f16vec3 res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.msl b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.msl
index 6238a7d..0f79076 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.msl
@@ -6,7 +6,7 @@
 }
 
 void atanh_ec4b06() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(0.5h);
   half3 res = tint_atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.spvasm b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.spvasm
index c58d4e3..dea5136 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 47
+; Bound: 49
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -46,8 +46,10 @@
          %21 = OpConstantNull %v3half
        %void = OpTypeVoid
          %24 = OpTypeFunction %void
+%half_0x1pn1 = OpConstant %half 0x1p-1
+         %29 = OpConstantComposite %v3half %half_0x1pn1 %half_0x1pn1 %half_0x1pn1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %33 = OpTypeFunction %v4float
+         %35 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tint_atanh = OpFunction %v3half None %9
           %x = OpFunctionParameter %v3half
@@ -61,31 +63,31 @@
          %27 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v3half Function %21
         %res = OpVariable %_ptr_Function_v3half Function %21
-               OpStore %arg_0 %21
-         %31 = OpLoad %v3half %arg_0
-         %30 = OpFunctionCall %v3half %tint_atanh %31
-               OpStore %res %30
+               OpStore %arg_0 %29
+         %33 = OpLoad %v3half %arg_0
+         %32 = OpFunctionCall %v3half %tint_atanh %33
+               OpStore %res %32
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %33
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %atanh_ec4b06
+%vertex_main_inner = OpFunction %v4float None %35
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %atanh_ec4b06
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %24
-         %38 = OpLabel
-         %39 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %39
+         %40 = OpLabel
+         %41 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %41
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %24
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %atanh_ec4b06
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %atanh_ec4b06
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %24
-         %45 = OpLabel
-         %46 = OpFunctionCall %void %atanh_ec4b06
+         %47 = OpLabel
+         %48 = OpFunctionCall %void %atanh_ec4b06
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.wgsl
index b22a682..39c4b83 100644
--- a/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atanh/ec4b06.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn atanh_ec4b06() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(0.5h);
   var res : vec3<f16> = atanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl b/test/tint/builtins/gen/var/ceil/09bf52.wgsl
index a248d86..cbaee7b 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(vec<3, f16>) -> vec<3, f16>
 fn ceil_09bf52() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.5h);
   var res: vec3<f16> = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.dxc.hlsl
index f513773..e3fd593 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_09bf52() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.5h)).xxx;
   vector<float16_t, 3> res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.glsl b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.glsl
index 252778d..6ef9722 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_09bf52() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.5hf);
   f16vec3 res = ceil(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void ceil_09bf52() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.5hf);
   f16vec3 res = ceil(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_09bf52() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.5hf);
   f16vec3 res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.msl b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.msl
index 9ee766b..96a9b32 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_09bf52() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.5h);
   half3 res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.spvasm
index dcc2ae0..feea526 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
+         %16 = OpConstantComposite %v3half %half_0x1_8p_0 %half_0x1_8p_0 %half_0x1_8p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_09bf52 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Ceil %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Ceil %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %ceil_09bf52
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %ceil_09bf52
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %ceil_09bf52
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %ceil_09bf52
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %ceil_09bf52
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %ceil_09bf52
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.wgsl
index c190c89..35408a5 100644
--- a/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ceil/09bf52.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_09bf52() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.5h);
   var res : vec3<f16> = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl b/test/tint/builtins/gen/var/ceil/18c240.wgsl
index 76d060c..5e554cc 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(vec<2, f16>) -> vec<2, f16>
 fn ceil_18c240() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.5h);
   var res: vec2<f16> = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.dxc.hlsl
index 5080e46..cfbc86d 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_18c240() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.5h)).xx;
   vector<float16_t, 2> res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.glsl b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.glsl
index 5b75aaa..d76e772 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_18c240() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.5hf);
   f16vec2 res = ceil(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void ceil_18c240() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.5hf);
   f16vec2 res = ceil(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_18c240() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.5hf);
   f16vec2 res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.msl b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.msl
index dab2bcc..d10193a 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_18c240() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.5h);
   half2 res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.spvasm
index 2bb39de..f5b89de 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
+         %16 = OpConstantComposite %v2half %half_0x1_8p_0 %half_0x1_8p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_18c240 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Ceil %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Ceil %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %ceil_18c240
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %ceil_18c240
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %ceil_18c240
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %ceil_18c240
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %ceil_18c240
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %ceil_18c240
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.wgsl
index aaf0fad..dc2a454 100644
--- a/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ceil/18c240.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_18c240() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.5h);
   var res : vec2<f16> = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl
index 28f5121..5af7c60 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(vec<4, f16>) -> vec<4, f16>
 fn ceil_4bca2a() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.5h);
   var res: vec4<f16> = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.dxc.hlsl
index 804cde2..23da27f 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_4bca2a() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.5h)).xxxx;
   vector<float16_t, 4> res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.glsl b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.glsl
index d9ac78f..1f11412 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_4bca2a() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.5hf);
   f16vec4 res = ceil(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void ceil_4bca2a() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.5hf);
   f16vec4 res = ceil(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_4bca2a() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.5hf);
   f16vec4 res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.msl b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.msl
index 82cc714..c19ee3e 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_4bca2a() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.5h);
   half4 res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.spvasm
index e0f5dea..63f2c7d 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
+         %16 = OpConstantComposite %v4half %half_0x1_8p_0 %half_0x1_8p_0 %half_0x1_8p_0 %half_0x1_8p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_4bca2a = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Ceil %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Ceil %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %ceil_4bca2a
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %ceil_4bca2a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %ceil_4bca2a
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %ceil_4bca2a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %ceil_4bca2a
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %ceil_4bca2a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.wgsl
index 682d1c3..3cfbbfb 100644
--- a/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ceil/4bca2a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_4bca2a() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.5h);
   var res : vec4<f16> = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl b/test/tint/builtins/gen/var/ceil/f3f889.wgsl
index 2053a50..b6dd4eb 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl
@@ -25,7 +25,7 @@
 
 // fn ceil(f16) -> f16
 fn ceil_f3f889() {
-  var arg_0 = f16();
+  var arg_0 = 1.5h;
   var res: f16 = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.dxc.hlsl
index 03dab80..483ceb6 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ceil_f3f889() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.5h);
   float16_t res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.glsl b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.glsl
index 3459b17..5bef6ff 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_f3f889() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.5hf;
   float16_t res = ceil(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void ceil_f3f889() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.5hf;
   float16_t res = ceil(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ceil_f3f889() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.5hf;
   float16_t res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.msl b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.msl
index 48f8d6d..2b7e48d 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ceil_f3f889() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.5h;
   half res = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.spvasm
index 4d48df9..0d412df 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ceil_f3f889 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Ceil %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1_8p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Ceil %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %ceil_f3f889
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %ceil_f3f889
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %ceil_f3f889
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %ceil_f3f889
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %ceil_f3f889
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %ceil_f3f889
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.wgsl
index d00960e..442e78f 100644
--- a/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ceil/f3f889.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ceil_f3f889() {
-  var arg_0 = f16();
+  var arg_0 = 1.5h;
   var res : f16 = ceil(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl b/test/tint/builtins/gen/var/clamp/235b29.wgsl
index c77a340..27cdc7c 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl
@@ -25,9 +25,9 @@
 
 // fn clamp(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn clamp_235b29() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = vec2<f16>(1.h);
   var res: vec2<f16> = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.dxc.hlsl
index 0bab035..7840136 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void clamp_235b29() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_2 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_2 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.glsl
index 1921aab..e721222 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_235b29() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void clamp_235b29() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_235b29() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.msl
index 1d2f620..16a71cb 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void clamp_235b29() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half2 arg_2 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half2 arg_2 = half2(1.0h);
   half2 res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.spvasm
index c93b5b8..3d10d2f 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_235b29 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v2half %arg_0
-         %23 = OpLoad %v2half %arg_1
-         %24 = OpLoad %v2half %arg_2
-         %20 = OpExtInst %v2half %21 NClamp %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v2half %arg_0
+         %25 = OpLoad %v2half %arg_1
+         %26 = OpLoad %v2half %arg_2
+         %22 = OpExtInst %v2half %23 NClamp %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %clamp_235b29
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_235b29
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %clamp_235b29
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %clamp_235b29
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %clamp_235b29
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %clamp_235b29
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.wgsl
index 93013b2..b39b925 100644
--- a/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/235b29.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn clamp_235b29() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = vec2<f16>(1.0h);
   var res : vec2<f16> = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl b/test/tint/builtins/gen/var/clamp/2c251b.wgsl
index 95d83b9..b4b458a7 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl
@@ -25,9 +25,9 @@
 
 // fn clamp(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn clamp_2c251b() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = vec4<f16>(1.h);
   var res: vec4<f16> = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.dxc.hlsl
index 71ec4f6..6323b4b 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void clamp_2c251b() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_2 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_2 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.glsl
index 6c4f3c1..680ad9e 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_2c251b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void clamp_2c251b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_2c251b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.msl
index b84d2b0..8bbe301 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void clamp_2c251b() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half4 arg_2 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half4 arg_2 = half4(1.0h);
   half4 res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.spvasm
index 995110b..e7f9e12 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_2c251b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v4half %arg_0
-         %23 = OpLoad %v4half %arg_1
-         %24 = OpLoad %v4half %arg_2
-         %20 = OpExtInst %v4half %21 NClamp %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v4half %arg_0
+         %25 = OpLoad %v4half %arg_1
+         %26 = OpLoad %v4half %arg_2
+         %22 = OpExtInst %v4half %23 NClamp %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %clamp_2c251b
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_2c251b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %clamp_2c251b
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %clamp_2c251b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %clamp_2c251b
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %clamp_2c251b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.wgsl
index 66ca8c3..e4b9b24 100644
--- a/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/2c251b.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn clamp_2c251b() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = vec4<f16>(1.0h);
   var res : vec4<f16> = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl b/test/tint/builtins/gen/var/clamp/553ffb.wgsl
index accceec..cf84196 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl
@@ -25,9 +25,9 @@
 
 // fn clamp(f16, f16, f16) -> f16
 fn clamp_553ffb() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
+  var arg_2 = 1.h;
   var res: f16 = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.dxc.hlsl
index 3b9eae4..9b52ff1 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void clamp_553ffb() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
-  float16_t arg_2 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
+  float16_t arg_2 = float16_t(1.0h);
   float16_t res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.glsl
index 30b888f..7381ed8 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_553ffb() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void clamp_553ffb() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_553ffb() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.msl
index 27aaf05..4b78c06 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void clamp_553ffb() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
-  half arg_2 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
+  half arg_2 = 1.0h;
   half res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.spvasm
index 4254790..a5291a7 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,45 +39,46 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_553ffb = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-      %arg_2 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-               OpStore %arg_2 %14
-         %21 = OpLoad %half %arg_0
-         %22 = OpLoad %half %arg_1
-         %23 = OpLoad %half %arg_2
-         %19 = OpExtInst %half %20 NClamp %21 %22 %23
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+      %arg_2 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+               OpStore %arg_2 %half_0x1p_0
+         %22 = OpLoad %half %arg_0
+         %23 = OpLoad %half %arg_1
+         %24 = OpLoad %half %arg_2
+         %20 = OpExtInst %half %21 NClamp %22 %23 %24
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_553ffb
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %clamp_553ffb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %clamp_553ffb
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %clamp_553ffb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %clamp_553ffb
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %clamp_553ffb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.wgsl
index 875ec68..7a447e3 100644
--- a/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/553ffb.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn clamp_553ffb() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
+  var arg_2 = 1.0h;
   var res : f16 = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl b/test/tint/builtins/gen/var/clamp/b195eb.wgsl
index b0680c3..f4f03ff 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl
@@ -25,9 +25,9 @@
 
 // fn clamp(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn clamp_b195eb() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = vec3<f16>(1.h);
   var res: vec3<f16> = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.dxc.hlsl
index 51d3bc6..dffd29f 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void clamp_b195eb() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_2 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_2 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.glsl
index d1d0084..222c3d0 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_b195eb() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void clamp_b195eb() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = clamp(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void clamp_b195eb() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.msl
index 3bedc87..6f9f9de 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void clamp_b195eb() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half3 arg_2 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half3 arg_2 = half3(1.0h);
   half3 res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.spvasm
index 2383ac6..9b6bd0c 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %clamp_b195eb = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v3half %arg_0
-         %23 = OpLoad %v3half %arg_1
-         %24 = OpLoad %v3half %arg_2
-         %20 = OpExtInst %v3half %21 NClamp %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v3half %arg_0
+         %25 = OpLoad %v3half %arg_1
+         %26 = OpLoad %v3half %arg_2
+         %22 = OpExtInst %v3half %23 NClamp %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %clamp_b195eb
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_b195eb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %clamp_b195eb
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %clamp_b195eb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %clamp_b195eb
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %clamp_b195eb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.wgsl
index 7baa8c0..82ce2ad 100644
--- a/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/b195eb.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn clamp_b195eb() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = vec3<f16>(1.0h);
   var res : vec3<f16> = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl b/test/tint/builtins/gen/var/cos/0835a8.wgsl
index 305a93e..c356198 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(vec<3, f16>) -> vec<3, f16>
 fn cos_0835a8() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.dxc.hlsl
index cced281..919fcc1 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_0835a8() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.glsl b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.glsl
index bafe1a5..a923fd6 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0835a8() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = cos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cos_0835a8() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = cos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0835a8() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.msl b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.msl
index 9420e0b..b554124 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_0835a8() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.spvasm
index 9ae25ea..87cd164 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_0835a8 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Cos %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Cos %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %cos_0835a8
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %cos_0835a8
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cos_0835a8
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %cos_0835a8
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %cos_0835a8
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %cos_0835a8
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.wgsl
index 9646c47..43b8eed 100644
--- a/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cos/0835a8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_0835a8() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl b/test/tint/builtins/gen/var/cos/0a89f7.wgsl
index 57ead0a..ce5ef06 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(vec<4, f16>) -> vec<4, f16>
 fn cos_0a89f7() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.dxc.hlsl
index 3d47a4a..b6dac40 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_0a89f7() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.glsl b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.glsl
index ba601e2..cfc1cb0 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0a89f7() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = cos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cos_0a89f7() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = cos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_0a89f7() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.msl b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.msl
index 82d913d..f89f5aa 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_0a89f7() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.spvasm
index c2987df..c8aabaa 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_0a89f7 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Cos %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Cos %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %cos_0a89f7
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %cos_0a89f7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cos_0a89f7
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %cos_0a89f7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %cos_0a89f7
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %cos_0a89f7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.wgsl
index 9d809bd..8e6922b 100644
--- a/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cos/0a89f7.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_0a89f7() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl
index f539734..0bb9c53 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(vec<2, f16>) -> vec<2, f16>
 fn cos_5bc2c6() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.dxc.hlsl
index 09dad0a..37f2acc 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_5bc2c6() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.glsl b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.glsl
index 511a507..68cc14e 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_5bc2c6() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = cos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cos_5bc2c6() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = cos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_5bc2c6() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.msl b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.msl
index 0eb3596..adc4e86 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_5bc2c6() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.spvasm
index e3000bb..b51aa37 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_5bc2c6 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Cos %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Cos %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %cos_5bc2c6
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %cos_5bc2c6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cos_5bc2c6
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %cos_5bc2c6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %cos_5bc2c6
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %cos_5bc2c6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.wgsl
index f5711b7..5921e36 100644
--- a/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cos/5bc2c6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_5bc2c6() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl b/test/tint/builtins/gen/var/cos/fc047d.wgsl
index 0daf862..c98a8e6 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl
@@ -25,7 +25,7 @@
 
 // fn cos(f16) -> f16
 fn cos_fc047d() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.dxc.hlsl
index 54b9f70..da5643c 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cos_fc047d() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.glsl b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.glsl
index 093b9d2..2d154c5 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_fc047d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = cos(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cos_fc047d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = cos(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cos_fc047d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.msl b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.msl
index 2c230eb..676a0e7 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cos_fc047d() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.spvasm
index 4adfb5e..ad3b3e1 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %cos_fc047d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Cos %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Cos %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %cos_fc047d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cos_fc047d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %cos_fc047d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cos_fc047d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %cos_fc047d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cos_fc047d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.wgsl
index 2230ba2..da53171 100644
--- a/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cos/fc047d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cos_fc047d() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = cos(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl b/test/tint/builtins/gen/var/cosh/2ed778.wgsl
index b1f69a8..6fa64e4 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(f16) -> f16
 fn cosh_2ed778() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.dxc.hlsl
index 6689a7f..ebaf4cd 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_2ed778() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.glsl b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.glsl
index 52057b9..fdf36df 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_2ed778() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = cosh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cosh_2ed778() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = cosh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_2ed778() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.msl b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.msl
index 6f72358..d79ff18 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_2ed778() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.spvasm
index 2079d7e..00f1d05 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_2ed778 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Cosh %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Cosh %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %cosh_2ed778
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %cosh_2ed778
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %cosh_2ed778
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %cosh_2ed778
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %cosh_2ed778
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %cosh_2ed778
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.wgsl
index 4d56705..c86f551 100644
--- a/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cosh/2ed778.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_2ed778() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl
index 133748a..8ef43e7 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(vec<4, f16>) -> vec<4, f16>
 fn cosh_3b7bbf() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.dxc.hlsl
index 5a96478..8872b6e 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_3b7bbf() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.glsl b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.glsl
index 8ea08d9..987508a 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_3b7bbf() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = cosh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cosh_3b7bbf() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = cosh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_3b7bbf() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.msl b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.msl
index 12acf5f..b359421 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_3b7bbf() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.spvasm
index 3b9f8d4..f526da5 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_3b7bbf = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Cosh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Cosh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %cosh_3b7bbf
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %cosh_3b7bbf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cosh_3b7bbf
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %cosh_3b7bbf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %cosh_3b7bbf
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %cosh_3b7bbf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.wgsl
index 06d346d..185b5f3 100644
--- a/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cosh/3b7bbf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_3b7bbf() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl b/test/tint/builtins/gen/var/cosh/43b672.wgsl
index a1e32ad..4da2103 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(vec<2, f16>) -> vec<2, f16>
 fn cosh_43b672() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.dxc.hlsl
index db19b27..6e196c7 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_43b672() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.glsl b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.glsl
index 8c60a2c..79a299c 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_43b672() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = cosh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cosh_43b672() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = cosh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_43b672() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.msl b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.msl
index 1a50e7e..528da9f 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_43b672() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.spvasm
index 5658285..bc597ce 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_43b672 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Cosh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Cosh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %cosh_43b672
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %cosh_43b672
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cosh_43b672
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %cosh_43b672
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %cosh_43b672
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %cosh_43b672
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.wgsl
index 979119f..c73fb44 100644
--- a/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cosh/43b672.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_43b672() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl
index 10b551b..895a167 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl
@@ -25,7 +25,7 @@
 
 // fn cosh(vec<3, f16>) -> vec<3, f16>
 fn cosh_b1b8a0() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.dxc.hlsl
index a058cd2..f7e411c 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void cosh_b1b8a0() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.glsl b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.glsl
index 6566e92..d9e6203 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_b1b8a0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = cosh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void cosh_b1b8a0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = cosh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cosh_b1b8a0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.msl b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.msl
index 2cf0802..f350cd5 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void cosh_b1b8a0() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.spvasm
index 29505ec..c096e6f 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cosh_b1b8a0 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Cosh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Cosh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %cosh_b1b8a0
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %cosh_b1b8a0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %cosh_b1b8a0
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %cosh_b1b8a0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %cosh_b1b8a0
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %cosh_b1b8a0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.wgsl
index 273765b..f0d9b86 100644
--- a/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cosh/b1b8a0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn cosh_b1b8a0() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = cosh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl b/test/tint/builtins/gen/var/cross/9857cb.wgsl
index cc7409f..c369045 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl
@@ -25,8 +25,8 @@
 
 // fn cross(vec3<f16>, vec3<f16>) -> vec3<f16>
 fn cross_9857cb() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = cross(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.dxc.hlsl
index fdb9f03..c612c29 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void cross_9857cb() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = cross(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.glsl b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.glsl
index 8d62b40..b5f1a53 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cross_9857cb() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = cross(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void cross_9857cb() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = cross(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void cross_9857cb() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = cross(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.msl b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.msl
index 23ad005..d977572 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void cross_9857cb() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = cross(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.spvasm
index 3f88a0b..3d4096e 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %cross_9857cb = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 Cross %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 Cross %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %cross_9857cb
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %cross_9857cb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %cross_9857cb
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %cross_9857cb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %cross_9857cb
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %cross_9857cb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.wgsl
index f1706c4..6fdeaeb 100644
--- a/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/cross/9857cb.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn cross_9857cb() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = cross(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl b/test/tint/builtins/gen/var/degrees/3055d3.wgsl
index 2ccb71f..0929dda 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(vec<4, f16>) -> vec<4, f16>
 fn degrees_3055d3() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.dxc.hlsl
index b7a4b58..e2b7da8 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_3055d3() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.glsl b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.glsl
index 8a05103..0b4d067 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_3055d3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_degrees(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void degrees_3055d3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_degrees(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void degrees_3055d3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.msl b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.msl
index e4ca478..a14dbf8 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_3055d3() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.spvasm
index 2604fcf..f7b5aa1 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_3055d3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Degrees %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Degrees %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %degrees_3055d3
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %degrees_3055d3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %degrees_3055d3
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %degrees_3055d3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %degrees_3055d3
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %degrees_3055d3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.wgsl
index 284c1c8..b0f9f14 100644
--- a/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/degrees/3055d3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_3055d3() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl b/test/tint/builtins/gen/var/degrees/5e9805.wgsl
index 3b13f5f..736d6cc 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(f16) -> f16
 fn degrees_5e9805() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.dxc.hlsl
index b23805c..3616145 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_5e9805() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.glsl b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.glsl
index 69aaca4..5f997f2 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_5e9805() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_degrees(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void degrees_5e9805() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_degrees(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void degrees_5e9805() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.msl b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.msl
index 6639be5..a3fde5c 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_5e9805() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.spvasm b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.spvasm
index bb16620..a27b49a 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_5e9805 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Degrees %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Degrees %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %degrees_5e9805
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %degrees_5e9805
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %degrees_5e9805
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %degrees_5e9805
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %degrees_5e9805
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %degrees_5e9805
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.wgsl b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.wgsl
index 1d9e554..76d31b9 100644
--- a/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/degrees/5e9805.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_5e9805() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl
index 6cd4a1d..fea71fe 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(vec<3, f16>) -> vec<3, f16>
 fn degrees_dfe8f4() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.dxc.hlsl
index 392869b..2e9d203 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_dfe8f4() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.glsl b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.glsl
index d82db9e..df614921 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_dfe8f4() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_degrees(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void degrees_dfe8f4() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_degrees(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void degrees_dfe8f4() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.msl b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.msl
index cf288cd..c9135cd 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_dfe8f4() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.spvasm
index 3216613..bb67782 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_dfe8f4 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Degrees %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Degrees %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %degrees_dfe8f4
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %degrees_dfe8f4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %degrees_dfe8f4
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %degrees_dfe8f4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %degrees_dfe8f4
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %degrees_dfe8f4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.wgsl
index 3ec216f..7cdbf02 100644
--- a/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/degrees/dfe8f4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_dfe8f4() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl b/test/tint/builtins/gen/var/degrees/f59715.wgsl
index a091857..4cb5747 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl
@@ -25,7 +25,7 @@
 
 // fn degrees(vec<2, f16>) -> vec<2, f16>
 fn degrees_f59715() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.dxc.hlsl
index 2bf6ba7..1936b6a 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void degrees_f59715() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.glsl b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.glsl
index 0273ac4..d4665f0 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void degrees_f59715() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_degrees(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void degrees_f59715() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_degrees(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void degrees_f59715() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.msl b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.msl
index a454ff0..5a10bbf 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void degrees_f59715() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = tint_degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.spvasm b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.spvasm
index dfdcb24..fec5d9f 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %degrees_f59715 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Degrees %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Degrees %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %degrees_f59715
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %degrees_f59715
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %degrees_f59715
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %degrees_f59715
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %degrees_f59715
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %degrees_f59715
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.wgsl b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.wgsl
index b3a6abf..80f75e6 100644
--- a/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/degrees/f59715.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn degrees_f59715() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = degrees(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl b/test/tint/builtins/gen/var/determinant/32bfde.wgsl
index fd0a38e..93c2ccf 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl
@@ -25,7 +25,7 @@
 
 // fn determinant(mat<4, 4, f16>) -> f16
 fn determinant_32bfde() {
-  var arg_0 = mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: f16 = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.dxc.hlsl
index 21bb924..a2bf98f 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void determinant_32bfde() {
-  matrix<float16_t, 4, 4> arg_0 = matrix<float16_t, 4, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  matrix<float16_t, 4, 4> arg_0 = matrix<float16_t, 4, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
   float16_t res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.glsl b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.glsl
index 2edc4db..ecf8080 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_32bfde() {
-  f16mat4 arg_0 = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat4 arg_0 = f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void determinant_32bfde() {
-  f16mat4 arg_0 = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat4 arg_0 = f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_32bfde() {
-  f16mat4 arg_0 = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat4 arg_0 = f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.msl b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.msl
index 2398440..78edf50 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void determinant_32bfde() {
-  half4x4 arg_0 = half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h));
+  half4x4 arg_0 = half4x4(half4(1.0h), half4(1.0h), half4(1.0h), half4(1.0h));
   half res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.spvasm b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.spvasm
index 3af3168..9e1612e 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,41 +39,44 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
  %mat4v4half = OpTypeMatrix %v4half 4
-         %16 = OpConstantNull %mat4v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat4v4half %17 %17 %17 %17
 %_ptr_Function_mat4v4half = OpTypePointer Function %mat4v4half
+         %21 = OpConstantNull %mat4v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %24 = OpConstantNull %half
-         %25 = OpTypeFunction %v4float
+         %27 = OpConstantNull %half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %determinant_32bfde = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat4v4half Function %16
-        %res = OpVariable %_ptr_Function_half Function %24
-               OpStore %arg_0 %16
-         %21 = OpLoad %mat4v4half %arg_0
-         %19 = OpExtInst %half %20 Determinant %21
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat4v4half Function %21
+        %res = OpVariable %_ptr_Function_half Function %27
+               OpStore %arg_0 %18
+         %24 = OpLoad %mat4v4half %arg_0
+         %22 = OpExtInst %half %23 Determinant %24
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %determinant_32bfde
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %determinant_32bfde
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %determinant_32bfde
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %determinant_32bfde
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %determinant_32bfde
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %determinant_32bfde
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.wgsl b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.wgsl
index c0fcade..e172f25 100644
--- a/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/determinant/32bfde.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn determinant_32bfde() {
-  var arg_0 = mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : f16 = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl
index b071018..35a33c8 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl
@@ -25,7 +25,7 @@
 
 // fn determinant(mat<3, 3, f16>) -> f16
 fn determinant_d7c86f() {
-  var arg_0 = mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: f16 = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.dxc.hlsl
index 899cb34..5abf230 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void determinant_d7c86f() {
-  matrix<float16_t, 3, 3> arg_0 = matrix<float16_t, 3, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  matrix<float16_t, 3, 3> arg_0 = matrix<float16_t, 3, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
   float16_t res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.glsl b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.glsl
index 9718310..e1423fd 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_d7c86f() {
-  f16mat3 arg_0 = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat3 arg_0 = f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void determinant_d7c86f() {
-  f16mat3 arg_0 = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat3 arg_0 = f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_d7c86f() {
-  f16mat3 arg_0 = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat3 arg_0 = f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.msl b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.msl
index a3b282f..789c6f1 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void determinant_d7c86f() {
-  half3x3 arg_0 = half3x3(half3(0.0h), half3(0.0h), half3(0.0h));
+  half3x3 arg_0 = half3x3(half3(1.0h), half3(1.0h), half3(1.0h));
   half res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.spvasm
index 0540412..931fae8 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,41 +39,44 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
  %mat3v3half = OpTypeMatrix %v3half 3
-         %16 = OpConstantNull %mat3v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat3v3half %17 %17 %17
 %_ptr_Function_mat3v3half = OpTypePointer Function %mat3v3half
+         %21 = OpConstantNull %mat3v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %24 = OpConstantNull %half
-         %25 = OpTypeFunction %v4float
+         %27 = OpConstantNull %half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %determinant_d7c86f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat3v3half Function %16
-        %res = OpVariable %_ptr_Function_half Function %24
-               OpStore %arg_0 %16
-         %21 = OpLoad %mat3v3half %arg_0
-         %19 = OpExtInst %half %20 Determinant %21
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat3v3half Function %21
+        %res = OpVariable %_ptr_Function_half Function %27
+               OpStore %arg_0 %18
+         %24 = OpLoad %mat3v3half %arg_0
+         %22 = OpExtInst %half %23 Determinant %24
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %determinant_d7c86f
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %determinant_d7c86f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %determinant_d7c86f
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %determinant_d7c86f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %determinant_d7c86f
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %determinant_d7c86f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.wgsl
index aae4d08..2c27978 100644
--- a/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/determinant/d7c86f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn determinant_d7c86f() {
-  var arg_0 = mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : f16 = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl
index bcb0f6e..c2a57d6 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl
@@ -25,7 +25,7 @@
 
 // fn determinant(mat<2, 2, f16>) -> f16
 fn determinant_fc12a5() {
-  var arg_0 = mat2x2<f16>(f16(), f16(), f16(), f16());
+  var arg_0 = mat2x2<f16>(1.h, 1.h, 1.h, 1.h);
   var res: f16 = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.dxc.hlsl
index 46328d5..691fa80 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void determinant_fc12a5() {
-  matrix<float16_t, 2, 2> arg_0 = matrix<float16_t, 2, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  matrix<float16_t, 2, 2> arg_0 = matrix<float16_t, 2, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
   float16_t res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.glsl b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.glsl
index a8dbfa6..9cfd014 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_fc12a5() {
-  f16mat2 arg_0 = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat2 arg_0 = f16mat2(f16vec2(1.0hf), f16vec2(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void determinant_fc12a5() {
-  f16mat2 arg_0 = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat2 arg_0 = f16mat2(f16vec2(1.0hf), f16vec2(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void determinant_fc12a5() {
-  f16mat2 arg_0 = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat2 arg_0 = f16mat2(f16vec2(1.0hf), f16vec2(1.0hf));
   float16_t res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.msl b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.msl
index 2e6b14e..4c6e8ca 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void determinant_fc12a5() {
-  half2x2 arg_0 = half2x2(half2(0.0h), half2(0.0h));
+  half2x2 arg_0 = half2x2(half2(1.0h), half2(1.0h));
   half res = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.spvasm
index 1141730..aa2d81f 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,41 +39,44 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
  %mat2v2half = OpTypeMatrix %v2half 2
-         %16 = OpConstantNull %mat2v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat2v2half %17 %17
 %_ptr_Function_mat2v2half = OpTypePointer Function %mat2v2half
+         %21 = OpConstantNull %mat2v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %24 = OpConstantNull %half
-         %25 = OpTypeFunction %v4float
+         %27 = OpConstantNull %half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %determinant_fc12a5 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat2v2half Function %16
-        %res = OpVariable %_ptr_Function_half Function %24
-               OpStore %arg_0 %16
-         %21 = OpLoad %mat2v2half %arg_0
-         %19 = OpExtInst %half %20 Determinant %21
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat2v2half Function %21
+        %res = OpVariable %_ptr_Function_half Function %27
+               OpStore %arg_0 %18
+         %24 = OpLoad %mat2v2half %arg_0
+         %22 = OpExtInst %half %23 Determinant %24
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %determinant_fc12a5
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %determinant_fc12a5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %determinant_fc12a5
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %determinant_fc12a5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %determinant_fc12a5
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %determinant_fc12a5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.wgsl
index 225d3cf..26cd988 100644
--- a/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/determinant/fc12a5.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn determinant_fc12a5() {
-  var arg_0 = mat2x2<f16>(f16(), f16(), f16(), f16());
+  var arg_0 = mat2x2<f16>(1.0h, 1.0h, 1.0h, 1.0h);
   var res : f16 = determinant(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl b/test/tint/builtins/gen/var/distance/7272f3.wgsl
index f8aad30..40cdbe5 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl
@@ -25,8 +25,8 @@
 
 // fn distance(vec<4, f16>, vec<4, f16>) -> f16
 fn distance_7272f3() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.dxc.hlsl
index 1b62fdc..ddcf49a 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void distance_7272f3() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.glsl b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.glsl
index 16eba83..6f171d7 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7272f3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void distance_7272f3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7272f3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.msl b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.msl
index 24a1476..6f0a7c1 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void distance_7272f3() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.spvasm
index 967f8ea..457f5d5 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,44 +39,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpConstantNull %half
-         %26 = OpTypeFunction %v4float
+         %27 = OpConstantNull %half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_7272f3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_half Function %25
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %half %20 Distance %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_half Function %27
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %half %22 Distance %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %distance_7272f3
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %distance_7272f3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %distance_7272f3
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %distance_7272f3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %distance_7272f3
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %distance_7272f3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.wgsl
index 3689ad7..0b7e377 100644
--- a/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/distance/7272f3.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn distance_7272f3() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl b/test/tint/builtins/gen/var/distance/7d201f.wgsl
index a66064c..2d8cad9 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl
@@ -25,8 +25,8 @@
 
 // fn distance(f16, f16) -> f16
 fn distance_7d201f() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var res: f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.dxc.hlsl
index e83ccf1..c3c38ad 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void distance_7d201f() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.glsl b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.glsl
index 0ed25e6..83f64d9 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7d201f() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void distance_7d201f() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_7d201f() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.msl b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.msl
index 780d62e..cb18d26 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void distance_7d201f() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   half res = fabs(arg_0 - arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.spvasm
index b39b43c..1718943 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,42 +38,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_7d201f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-         %20 = OpLoad %half %arg_0
-         %21 = OpLoad %half %arg_1
-         %18 = OpExtInst %half %19 Distance %20 %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %22 = OpLoad %half %arg_1
+         %19 = OpExtInst %half %20 Distance %21 %22
+               OpStore %res %19
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %distance_7d201f
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %distance_7d201f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %distance_7d201f
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %distance_7d201f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %distance_7d201f
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %distance_7d201f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.wgsl
index 4480b58..01bd486 100644
--- a/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/distance/7d201f.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn distance_7d201f() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var res : f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl b/test/tint/builtins/gen/var/distance/892a5d.wgsl
index 2a5c208..457acd1 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl
@@ -25,8 +25,8 @@
 
 // fn distance(vec<2, f16>, vec<2, f16>) -> f16
 fn distance_892a5d() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.dxc.hlsl
index 034e57e..e3a0d1a 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void distance_892a5d() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.glsl b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.glsl
index a615b6f..aeb2c00 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_892a5d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void distance_892a5d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_892a5d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.msl b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.msl
index 8fe755d..29351e7 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void distance_892a5d() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.spvasm
index 59a5d06..2beafc3 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,44 +39,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpConstantNull %half
-         %26 = OpTypeFunction %v4float
+         %27 = OpConstantNull %half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_892a5d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_half Function %25
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %half %20 Distance %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_half Function %27
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %half %22 Distance %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %distance_892a5d
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %distance_892a5d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %distance_892a5d
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %distance_892a5d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %distance_892a5d
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %distance_892a5d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.wgsl
index 279adaf..dac66dc 100644
--- a/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/distance/892a5d.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn distance_892a5d() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl b/test/tint/builtins/gen/var/distance/928fa0.wgsl
index 83a533b..3c115bb 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl
@@ -25,8 +25,8 @@
 
 // fn distance(vec<3, f16>, vec<3, f16>) -> f16
 fn distance_928fa0() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.dxc.hlsl
index 097d7b8..00de962 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void distance_928fa0() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.glsl b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.glsl
index 77dd598..52fedf6 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_928fa0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void distance_928fa0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void distance_928fa0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   float16_t res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.msl b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.msl
index b2a96ab..79b06d8 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void distance_928fa0() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half res = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.spvasm
index 9696539..18c6a14 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,44 +39,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpConstantNull %half
-         %26 = OpTypeFunction %v4float
+         %27 = OpConstantNull %half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %distance_928fa0 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_half Function %25
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %half %20 Distance %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_half Function %27
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %half %22 Distance %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %distance_928fa0
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %distance_928fa0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %distance_928fa0
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %distance_928fa0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %distance_928fa0
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %distance_928fa0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.wgsl
index 840d9e5..de4c41d 100644
--- a/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/distance/928fa0.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn distance_928fa0() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : f16 = distance(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl b/test/tint/builtins/gen/var/dot/8e40f1.wgsl
index eceecd1..7ddd2b0 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl
@@ -25,8 +25,8 @@
 
 // fn dot(vec<3, f16>, vec<3, f16>) -> f16
 fn dot_8e40f1() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: f16 = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.dxc.hlsl
index ad11be2..7d4895c 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void dot_8e40f1() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   float16_t res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.glsl b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.glsl
index 18066bf..2443ac5 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_8e40f1() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void dot_8e40f1() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_8e40f1() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.msl b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.msl
index eacb81c..d4618ea 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void dot_8e40f1() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.spvasm
index 6bed79d..e11563e 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,44 +38,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %24 = OpConstantNull %half
-         %25 = OpTypeFunction %v4float
+         %26 = OpConstantNull %half
+         %27 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %dot_8e40f1 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_half Function %24
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %20 = OpLoad %v3half %arg_0
-         %21 = OpLoad %v3half %arg_1
-         %19 = OpDot %half %20 %21
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_half Function %26
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %22 = OpLoad %v3half %arg_0
+         %23 = OpLoad %v3half %arg_1
+         %21 = OpDot %half %22 %23
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %dot_8e40f1
+%vertex_main_inner = OpFunction %v4float None %27
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %dot_8e40f1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %32 = OpLabel
+         %33 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %33
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %dot_8e40f1
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %dot_8e40f1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %dot_8e40f1
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %dot_8e40f1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.wgsl
index db92b08..4fb113c 100644
--- a/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/dot/8e40f1.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn dot_8e40f1() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : f16 = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl b/test/tint/builtins/gen/var/dot/cd5a04.wgsl
index 9226d5c..a5899b8 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl
@@ -25,8 +25,8 @@
 
 // fn dot(vec<2, f16>, vec<2, f16>) -> f16
 fn dot_cd5a04() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: f16 = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.dxc.hlsl
index 27c17be..8a4975f 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void dot_cd5a04() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   float16_t res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.glsl b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.glsl
index 03060ce..9016385 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_cd5a04() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void dot_cd5a04() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_cd5a04() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.msl b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.msl
index b70c4db..7c6e7b8 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void dot_cd5a04() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.spvasm b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.spvasm
index 9cef5f7..6375b60 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,44 +38,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %24 = OpConstantNull %half
-         %25 = OpTypeFunction %v4float
+         %26 = OpConstantNull %half
+         %27 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %dot_cd5a04 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_half Function %24
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %20 = OpLoad %v2half %arg_0
-         %21 = OpLoad %v2half %arg_1
-         %19 = OpDot %half %20 %21
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_half Function %26
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %22 = OpLoad %v2half %arg_0
+         %23 = OpLoad %v2half %arg_1
+         %21 = OpDot %half %22 %23
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %dot_cd5a04
+%vertex_main_inner = OpFunction %v4float None %27
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %dot_cd5a04
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %32 = OpLabel
+         %33 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %33
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %dot_cd5a04
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %dot_cd5a04
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %dot_cd5a04
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %dot_cd5a04
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.wgsl b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.wgsl
index 8fc1a17..feadf79 100644
--- a/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/dot/cd5a04.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn dot_cd5a04() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : f16 = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl b/test/tint/builtins/gen/var/dot/d0d179.wgsl
index 972ce43..b0d97df 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl
@@ -25,8 +25,8 @@
 
 // fn dot(vec<4, f16>, vec<4, f16>) -> f16
 fn dot_d0d179() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: f16 = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.dxc.hlsl
index e6a5b4c..15b532b 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void dot_d0d179() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   float16_t res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.glsl b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.glsl
index fd6939c..6401f34 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_d0d179() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void dot_d0d179() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void dot_d0d179() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   float16_t res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.msl b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.msl
index 4a83867..0f8b6a0 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void dot_d0d179() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half res = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.spvasm b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.spvasm
index 5bca828..c3516fa 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,44 +38,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %24 = OpConstantNull %half
-         %25 = OpTypeFunction %v4float
+         %26 = OpConstantNull %half
+         %27 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %dot_d0d179 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_half Function %24
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %20 = OpLoad %v4half %arg_0
-         %21 = OpLoad %v4half %arg_1
-         %19 = OpDot %half %20 %21
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_half Function %26
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %22 = OpLoad %v4half %arg_0
+         %23 = OpLoad %v4half %arg_1
+         %21 = OpDot %half %22 %23
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %dot_d0d179
+%vertex_main_inner = OpFunction %v4float None %27
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %dot_d0d179
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %32 = OpLabel
+         %33 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %33
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %dot_d0d179
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %dot_d0d179
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %dot_d0d179
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %dot_d0d179
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.wgsl b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.wgsl
index 3297912..c5cc59e 100644
--- a/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/dot/d0d179.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn dot_d0d179() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : f16 = dot(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl b/test/tint/builtins/gen/var/exp/13806d.wgsl
index 6c3ccde..d1a3936 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(vec<3, f16>) -> vec<3, f16>
 fn exp_13806d() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.dxc.hlsl
index eb7e5a8..6d669f8 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_13806d() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.glsl
index 72d5c8a..5f834eb 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_13806d() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = exp(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp_13806d() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = exp(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_13806d() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.msl b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.msl
index 891a68a..9076003 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_13806d() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.spvasm
index 90c0537..131c0ab 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_13806d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Exp %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Exp %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %exp_13806d
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %exp_13806d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp_13806d
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %exp_13806d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %exp_13806d
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %exp_13806d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.wgsl
index 044b03a..0004e77 100644
--- a/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp/13806d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_13806d() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl b/test/tint/builtins/gen/var/exp/2e08e2.wgsl
index 15f67b1..a9ef44c 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(vec<2, f16>) -> vec<2, f16>
 fn exp_2e08e2() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.dxc.hlsl
index e9d1413..93cc7d9 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_2e08e2() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.glsl
index f53e9a7..ce344e1 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_2e08e2() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = exp(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp_2e08e2() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = exp(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_2e08e2() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.msl b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.msl
index cc29327..0aee12f 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_2e08e2() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.spvasm
index 6c662e0..1d2f8cc 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_2e08e2 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Exp %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Exp %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %exp_2e08e2
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %exp_2e08e2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp_2e08e2
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %exp_2e08e2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %exp_2e08e2
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %exp_2e08e2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.wgsl
index c041e1a..c9f5542 100644
--- a/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp/2e08e2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_2e08e2() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl b/test/tint/builtins/gen/var/exp/611a87.wgsl
index 86e69d5..3e01f3e 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(vec<4, f16>) -> vec<4, f16>
 fn exp_611a87() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.dxc.hlsl
index 7b99c78..bf65c06 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_611a87() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.glsl
index ed49b7c..f0c864b 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_611a87() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = exp(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp_611a87() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = exp(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_611a87() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.msl b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.msl
index dd3d353..de79282 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_611a87() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.spvasm
index 17d3daf..64efbc3 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_611a87 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Exp %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Exp %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %exp_611a87
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %exp_611a87
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp_611a87
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %exp_611a87
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %exp_611a87
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %exp_611a87
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.wgsl
index d208a93..5a865ff 100644
--- a/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp/611a87.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_611a87() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl b/test/tint/builtins/gen/var/exp/c18fe9.wgsl
index e28c16a..9b5eacd 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp(f16) -> f16
 fn exp_c18fe9() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.dxc.hlsl
index c137c9c..990ca7f 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp_c18fe9() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.glsl
index 73b9ba1..4d85adf 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_c18fe9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = exp(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp_c18fe9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = exp(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp_c18fe9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.msl b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.msl
index 6bcb8c6..aa36536 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp_c18fe9() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.spvasm
index 8575fb8..f2899ba 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %exp_c18fe9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Exp %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Exp %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %exp_c18fe9
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp_c18fe9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %exp_c18fe9
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp_c18fe9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %exp_c18fe9
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp_c18fe9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.wgsl
index 3daf44c..1dc2377 100644
--- a/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp/c18fe9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp_c18fe9() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = exp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl b/test/tint/builtins/gen/var/exp2/151a4c.wgsl
index 5a42f5b..624605c 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(vec<2, f16>) -> vec<2, f16>
 fn exp2_151a4c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.dxc.hlsl
index d1633f9..7dda4b2 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_151a4c() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.glsl
index a3e4e93..8eac3ec 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_151a4c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = exp2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp2_151a4c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = exp2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_151a4c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.msl b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.msl
index 26b057c..f45a8f8 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_151a4c() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.spvasm
index 7db1e64..e9cbdcb 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_151a4c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Exp2 %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Exp2 %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %exp2_151a4c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %exp2_151a4c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp2_151a4c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %exp2_151a4c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %exp2_151a4c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %exp2_151a4c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.wgsl
index 33f0c7f..83cb186 100644
--- a/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp2/151a4c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_151a4c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl b/test/tint/builtins/gen/var/exp2/751377.wgsl
index 9f15ce7..682fa91 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(vec<3, f16>) -> vec<3, f16>
 fn exp2_751377() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.dxc.hlsl
index e6251d2..4cecb51 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_751377() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.glsl
index 93e0de7..e11657e 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_751377() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = exp2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp2_751377() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = exp2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_751377() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.msl b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.msl
index ee675e3..b786beb 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_751377() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.spvasm
index a6a7c0c..dc1d8c6 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_751377 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Exp2 %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Exp2 %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %exp2_751377
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %exp2_751377
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp2_751377
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %exp2_751377
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %exp2_751377
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %exp2_751377
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.wgsl
index 54d18f0..600e491 100644
--- a/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp2/751377.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_751377() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl b/test/tint/builtins/gen/var/exp2/b408e4.wgsl
index 25f4d91..61a04d5 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(f16) -> f16
 fn exp2_b408e4() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.dxc.hlsl
index 1da83c0..bab994c 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_b408e4() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.glsl
index 978b7df..573ddc0 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_b408e4() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = exp2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp2_b408e4() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = exp2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_b408e4() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.msl b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.msl
index 3e0cbb2..b0e32ac 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_b408e4() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.spvasm
index c387afb..73e5b91 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_b408e4 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Exp2 %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Exp2 %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %exp2_b408e4
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %exp2_b408e4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %exp2_b408e4
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %exp2_b408e4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %exp2_b408e4
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %exp2_b408e4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.wgsl
index 0772e03..d439dc5 100644
--- a/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp2/b408e4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_b408e4() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl b/test/tint/builtins/gen/var/exp2/ffa827.wgsl
index f9fc7cb..1755b00 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl
@@ -25,7 +25,7 @@
 
 // fn exp2(vec<4, f16>) -> vec<4, f16>
 fn exp2_ffa827() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.dxc.hlsl
index 199b7a8..b5bb9c2 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void exp2_ffa827() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.glsl b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.glsl
index eacdcb0..753e499 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_ffa827() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = exp2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void exp2_ffa827() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = exp2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void exp2_ffa827() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.msl b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.msl
index 0dc6782..5258bd2 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void exp2_ffa827() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.spvasm b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.spvasm
index d343ed6..cd61ab5 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %exp2_ffa827 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Exp2 %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Exp2 %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %exp2_ffa827
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %exp2_ffa827
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %exp2_ffa827
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %exp2_ffa827
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %exp2_ffa827
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %exp2_ffa827
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.wgsl b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.wgsl
index cc00537..8dccfdf 100644
--- a/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/exp2/ffa827.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn exp2_ffa827() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = exp2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl b/test/tint/builtins/gen/var/faceForward/524986.wgsl
index 1dafe7b..e1c67a7 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl
@@ -25,9 +25,9 @@
 
 // fn faceForward(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn faceForward_524986() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = vec3<f16>(1.h);
   var res: vec3<f16> = faceForward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.dxc.hlsl
index ebf2086..71085cb 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void faceForward_524986() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_2 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_2 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.glsl b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.glsl
index a53d710..83a9c60 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_524986() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = faceforward(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void faceForward_524986() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = faceforward(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_524986() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.msl b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.msl
index 71beddb..141e5ae 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void faceForward_524986() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half3 arg_2 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half3 arg_2 = half3(1.0h);
   half3 res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.spvasm b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.spvasm
index 7c84d75..0bf053a 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %faceForward_524986 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v3half %arg_0
-         %23 = OpLoad %v3half %arg_1
-         %24 = OpLoad %v3half %arg_2
-         %20 = OpExtInst %v3half %21 FaceForward %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v3half %arg_0
+         %25 = OpLoad %v3half %arg_1
+         %26 = OpLoad %v3half %arg_2
+         %22 = OpExtInst %v3half %23 FaceForward %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %faceForward_524986
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %faceForward_524986
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %faceForward_524986
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %faceForward_524986
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %faceForward_524986
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %faceForward_524986
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.wgsl b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.wgsl
index 99a0ce8..578fa24 100644
--- a/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/faceForward/524986.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn faceForward_524986() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = vec3<f16>(1.0h);
   var res : vec3<f16> = faceForward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl
index 4c15845..7b8d403 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl
@@ -25,9 +25,9 @@
 
 // fn faceForward(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn faceForward_cc63dc() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = vec4<f16>(1.h);
   var res: vec4<f16> = faceForward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.dxc.hlsl
index 9137554..ffcbad2 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void faceForward_cc63dc() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_2 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_2 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.glsl b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.glsl
index 37cf24f..2c6a87d 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_cc63dc() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = faceforward(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void faceForward_cc63dc() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = faceforward(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_cc63dc() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.msl b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.msl
index aa5ce15..21b9800 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void faceForward_cc63dc() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half4 arg_2 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half4 arg_2 = half4(1.0h);
   half4 res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.spvasm
index eccdf43..bff0d15 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %faceForward_cc63dc = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v4half %arg_0
-         %23 = OpLoad %v4half %arg_1
-         %24 = OpLoad %v4half %arg_2
-         %20 = OpExtInst %v4half %21 FaceForward %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v4half %arg_0
+         %25 = OpLoad %v4half %arg_1
+         %26 = OpLoad %v4half %arg_2
+         %22 = OpExtInst %v4half %23 FaceForward %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %faceForward_cc63dc
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %faceForward_cc63dc
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %faceForward_cc63dc
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %faceForward_cc63dc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %faceForward_cc63dc
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %faceForward_cc63dc
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.wgsl
index 48f247d..2622013 100644
--- a/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/faceForward/cc63dc.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn faceForward_cc63dc() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = vec4<f16>(1.0h);
   var res : vec4<f16> = faceForward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl
index 51da087..8e54844 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl
@@ -25,9 +25,9 @@
 
 // fn faceForward(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn faceForward_fb0f2e() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = vec2<f16>(1.h);
   var res: vec2<f16> = faceForward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.dxc.hlsl
index 9e0972c..82fcd39 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void faceForward_fb0f2e() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_2 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_2 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.glsl b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.glsl
index 9dfcea0..8ebf21e 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_fb0f2e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = faceforward(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void faceForward_fb0f2e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = faceforward(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void faceForward_fb0f2e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.msl b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.msl
index 9a425c7..68d7ad2 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void faceForward_fb0f2e() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half2 arg_2 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half2 arg_2 = half2(1.0h);
   half2 res = faceforward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.spvasm
index a5f1f81..8939181 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %faceForward_fb0f2e = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v2half %arg_0
-         %23 = OpLoad %v2half %arg_1
-         %24 = OpLoad %v2half %arg_2
-         %20 = OpExtInst %v2half %21 FaceForward %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v2half %arg_0
+         %25 = OpLoad %v2half %arg_1
+         %26 = OpLoad %v2half %arg_2
+         %22 = OpExtInst %v2half %23 FaceForward %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %faceForward_fb0f2e
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %faceForward_fb0f2e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %faceForward_fb0f2e
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %faceForward_fb0f2e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %faceForward_fb0f2e
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %faceForward_fb0f2e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.wgsl
index 985cbab..70ca64b 100644
--- a/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/faceForward/fb0f2e.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn faceForward_fb0f2e() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = vec2<f16>(1.0h);
   var res : vec2<f16> = faceForward(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl b/test/tint/builtins/gen/var/floor/3802c0.wgsl
index 22ede14..220e79d 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(vec<3, f16>) -> vec<3, f16>
 fn floor_3802c0() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.5h);
   var res: vec3<f16> = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.dxc.hlsl
index a997d82..b1cd810 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_3802c0() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.5h)).xxx;
   vector<float16_t, 3> res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.glsl b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.glsl
index 2f0dabf..6216160 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_3802c0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.5hf);
   f16vec3 res = floor(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void floor_3802c0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.5hf);
   f16vec3 res = floor(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_3802c0() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.5hf);
   f16vec3 res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.msl b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.msl
index 48f2187..dd9f442 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_3802c0() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.5h);
   half3 res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.spvasm
index 8c34a52..c903d74 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
+         %16 = OpConstantComposite %v3half %half_0x1_8p_0 %half_0x1_8p_0 %half_0x1_8p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_3802c0 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Floor %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Floor %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %floor_3802c0
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %floor_3802c0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %floor_3802c0
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %floor_3802c0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %floor_3802c0
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %floor_3802c0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.wgsl
index e668dbc..4ca298a 100644
--- a/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/floor/3802c0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_3802c0() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.5h);
   var res : vec3<f16> = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl b/test/tint/builtins/gen/var/floor/84658c.wgsl
index 9cf6d75..aa130e4 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(vec<2, f16>) -> vec<2, f16>
 fn floor_84658c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.5h);
   var res: vec2<f16> = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.dxc.hlsl
index d10e8f8..0ed6ecd 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_84658c() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.5h)).xx;
   vector<float16_t, 2> res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.glsl b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.glsl
index 6c2236f..1403f8e 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_84658c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.5hf);
   f16vec2 res = floor(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void floor_84658c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.5hf);
   f16vec2 res = floor(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_84658c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.5hf);
   f16vec2 res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.msl b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.msl
index dbc91a4..41e3d05 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_84658c() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.5h);
   half2 res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.spvasm
index 5ab1072..0a4395d 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
+         %16 = OpConstantComposite %v2half %half_0x1_8p_0 %half_0x1_8p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_84658c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Floor %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Floor %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %floor_84658c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %floor_84658c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %floor_84658c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %floor_84658c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %floor_84658c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %floor_84658c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.wgsl
index af40f90..d823b5a 100644
--- a/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/floor/84658c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_84658c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.5h);
   var res : vec2<f16> = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl b/test/tint/builtins/gen/var/floor/a2d31b.wgsl
index edc990a..3bdccebd 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(vec<4, f16>) -> vec<4, f16>
 fn floor_a2d31b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.5h);
   var res: vec4<f16> = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.dxc.hlsl
index 3eccce6..d32492c 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_a2d31b() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.5h)).xxxx;
   vector<float16_t, 4> res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.glsl b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.glsl
index 4e2d116..dc60c85 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_a2d31b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.5hf);
   f16vec4 res = floor(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void floor_a2d31b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.5hf);
   f16vec4 res = floor(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_a2d31b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.5hf);
   f16vec4 res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.msl b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.msl
index 521eda3..c261f68 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_a2d31b() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.5h);
   half4 res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.spvasm
index 4cf75b1..763f2fc 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
+         %16 = OpConstantComposite %v4half %half_0x1_8p_0 %half_0x1_8p_0 %half_0x1_8p_0 %half_0x1_8p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_a2d31b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Floor %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Floor %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %floor_a2d31b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %floor_a2d31b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %floor_a2d31b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %floor_a2d31b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %floor_a2d31b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %floor_a2d31b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.wgsl
index 7b23f7d..ec9a507 100644
--- a/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/floor/a2d31b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_a2d31b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.5h);
   var res : vec4<f16> = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl b/test/tint/builtins/gen/var/floor/b6e09c.wgsl
index 7ddbc74..a73b789 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl
@@ -25,7 +25,7 @@
 
 // fn floor(f16) -> f16
 fn floor_b6e09c() {
-  var arg_0 = f16();
+  var arg_0 = 1.5h;
   var res: f16 = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.dxc.hlsl
index a13fef1..6094c41 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void floor_b6e09c() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.5h);
   float16_t res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.glsl b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.glsl
index 5a9eded..530debd 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_b6e09c() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.5hf;
   float16_t res = floor(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void floor_b6e09c() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.5hf;
   float16_t res = floor(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void floor_b6e09c() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.5hf;
   float16_t res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.msl b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.msl
index eddf8f2..4907c87 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void floor_b6e09c() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.5h;
   half res = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.spvasm
index 45cc608..7db04db 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1_8p_0 = OpConstant %half 0x1.8p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %floor_b6e09c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Floor %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1_8p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Floor %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %floor_b6e09c
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %floor_b6e09c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %floor_b6e09c
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %floor_b6e09c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %floor_b6e09c
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %floor_b6e09c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.wgsl
index 68db5d7..62567c5 100644
--- a/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/floor/b6e09c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn floor_b6e09c() {
-  var arg_0 = f16();
+  var arg_0 = 1.5h;
   var res : f16 = floor(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl b/test/tint/builtins/gen/var/fma/ab7818.wgsl
index ab0ffd7..2d0cacc 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl
@@ -25,9 +25,9 @@
 
 // fn fma(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn fma_ab7818() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = vec4<f16>(1.h);
   var res: vec4<f16> = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.dxc.hlsl
index ba7fd24..2577424 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void fma_ab7818() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_2 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_2 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = mad(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.glsl b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.glsl
index 210f2f9..968b92e 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_ab7818() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void fma_ab7818() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_ab7818() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.msl b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.msl
index 7618e6d..ac5cd84 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void fma_ab7818() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half4 arg_2 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half4 arg_2 = half4(1.0h);
   half4 res = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.spvasm
index cfe30fe..39bd7ab 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_ab7818 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v4half %arg_0
-         %23 = OpLoad %v4half %arg_1
-         %24 = OpLoad %v4half %arg_2
-         %20 = OpExtInst %v4half %21 Fma %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v4half %arg_0
+         %25 = OpLoad %v4half %arg_1
+         %26 = OpLoad %v4half %arg_2
+         %22 = OpExtInst %v4half %23 Fma %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %fma_ab7818
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %fma_ab7818
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %fma_ab7818
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %fma_ab7818
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %fma_ab7818
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %fma_ab7818
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.wgsl
index 14808ba..a858af1 100644
--- a/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fma/ab7818.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn fma_ab7818() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = vec4<f16>(1.0h);
   var res : vec4<f16> = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl b/test/tint/builtins/gen/var/fma/bf21b6.wgsl
index 7fa2711..93baf09 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl
@@ -25,9 +25,9 @@
 
 // fn fma(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn fma_bf21b6() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = vec2<f16>(1.h);
   var res: vec2<f16> = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.dxc.hlsl
index fad0508..b9a8d05 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void fma_bf21b6() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_2 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_2 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = mad(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.glsl b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.glsl
index d6376ec..68d2e46 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_bf21b6() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void fma_bf21b6() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_bf21b6() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.msl b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.msl
index fd5f39c..beef6a7 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void fma_bf21b6() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half2 arg_2 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half2 arg_2 = half2(1.0h);
   half2 res = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.spvasm
index d66229d..5e403bd 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_bf21b6 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v2half %arg_0
-         %23 = OpLoad %v2half %arg_1
-         %24 = OpLoad %v2half %arg_2
-         %20 = OpExtInst %v2half %21 Fma %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v2half %arg_0
+         %25 = OpLoad %v2half %arg_1
+         %26 = OpLoad %v2half %arg_2
+         %22 = OpExtInst %v2half %23 Fma %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %fma_bf21b6
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %fma_bf21b6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %fma_bf21b6
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %fma_bf21b6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %fma_bf21b6
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %fma_bf21b6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.wgsl
index aef061d..d2f54c3 100644
--- a/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fma/bf21b6.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn fma_bf21b6() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = vec2<f16>(1.0h);
   var res : vec2<f16> = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl b/test/tint/builtins/gen/var/fma/c8abb3.wgsl
index c86a699..cd25769 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl
@@ -25,9 +25,9 @@
 
 // fn fma(f16, f16, f16) -> f16
 fn fma_c8abb3() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
+  var arg_2 = 1.h;
   var res: f16 = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.dxc.hlsl
index ce25e33..8c0c958 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void fma_c8abb3() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
-  float16_t arg_2 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
+  float16_t arg_2 = float16_t(1.0h);
   float16_t res = mad(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.glsl b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.glsl
index 971fb93..286d7c3 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_c8abb3() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void fma_c8abb3() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_c8abb3() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = ((arg_0) * (arg_1) + (arg_2));
 }
 
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.msl b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.msl
index 8cef0c3..9b513e7 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void fma_c8abb3() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
-  half arg_2 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
+  half arg_2 = 1.0h;
   half res = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.spvasm
index b033681..fe35e5d 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,45 +39,46 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_c8abb3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-      %arg_2 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-               OpStore %arg_2 %14
-         %21 = OpLoad %half %arg_0
-         %22 = OpLoad %half %arg_1
-         %23 = OpLoad %half %arg_2
-         %19 = OpExtInst %half %20 Fma %21 %22 %23
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+      %arg_2 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+               OpStore %arg_2 %half_0x1p_0
+         %22 = OpLoad %half %arg_0
+         %23 = OpLoad %half %arg_1
+         %24 = OpLoad %half %arg_2
+         %20 = OpExtInst %half %21 Fma %22 %23 %24
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %fma_c8abb3
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %fma_c8abb3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %fma_c8abb3
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %fma_c8abb3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %fma_c8abb3
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %fma_c8abb3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.wgsl
index 6f24f34..6d3be88 100644
--- a/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fma/c8abb3.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn fma_c8abb3() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
+  var arg_2 = 1.0h;
   var res : f16 = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl b/test/tint/builtins/gen/var/fma/e7abdc.wgsl
index a07279d..c8ffdad 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl
@@ -25,9 +25,9 @@
 
 // fn fma(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn fma_e7abdc() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = vec3<f16>(1.h);
   var res: vec3<f16> = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.dxc.hlsl
index b6b357e..d9701f8 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void fma_e7abdc() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_2 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_2 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = mad(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.glsl b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.glsl
index ba47f42..58b28ba 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_e7abdc() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void fma_e7abdc() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fma_e7abdc() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = ((arg_0) * (arg_1) + (arg_2));
 }
 
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.msl b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.msl
index c7e165a..4014cfc 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void fma_e7abdc() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half3 arg_2 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half3 arg_2 = half3(1.0h);
   half3 res = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.spvasm
index c9aaaf7..c5c6a7a 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %fma_e7abdc = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v3half %arg_0
-         %23 = OpLoad %v3half %arg_1
-         %24 = OpLoad %v3half %arg_2
-         %20 = OpExtInst %v3half %21 Fma %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v3half %arg_0
+         %25 = OpLoad %v3half %arg_1
+         %26 = OpLoad %v3half %arg_2
+         %22 = OpExtInst %v3half %23 Fma %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %fma_e7abdc
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %fma_e7abdc
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %fma_e7abdc
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %fma_e7abdc
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %fma_e7abdc
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %fma_e7abdc
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.wgsl
index 2dbbcac..fd8ecb1 100644
--- a/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fma/e7abdc.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn fma_e7abdc() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = vec3<f16>(1.0h);
   var res : vec3<f16> = fma(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl b/test/tint/builtins/gen/var/fract/181aa9.wgsl
index 12cc4bf..1ffd186 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(vec<2, f16>) -> vec<2, f16>
 fn fract_181aa9() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.dxc.hlsl
index 08a307d..6d73d2e 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_181aa9() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = frac(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.glsl b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.glsl
index e9871d3..f2283f7 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_181aa9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = fract(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void fract_181aa9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = fract(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_181aa9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.msl b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.msl
index f3351da..a44159f 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_181aa9() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.spvasm
index 47d1ee6..95c9f98 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_181aa9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Fract %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Fract %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %fract_181aa9
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %fract_181aa9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %fract_181aa9
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %fract_181aa9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %fract_181aa9
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %fract_181aa9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.wgsl
index 6e73c70..c65421c 100644
--- a/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fract/181aa9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_181aa9() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl b/test/tint/builtins/gen/var/fract/498c77.wgsl
index aef30b3..5ea4700 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(vec<4, f16>) -> vec<4, f16>
 fn fract_498c77() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.dxc.hlsl
index d9e34ef..5887de1 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_498c77() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = frac(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.glsl b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.glsl
index c9daa26..1e866f5 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_498c77() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = fract(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void fract_498c77() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = fract(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_498c77() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.msl b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.msl
index 3f7a3f1..9c08796 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_498c77() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.spvasm
index 62ab9e0..2ec1d9d 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_498c77 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Fract %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Fract %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %fract_498c77
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %fract_498c77
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %fract_498c77
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %fract_498c77
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %fract_498c77
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %fract_498c77
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.wgsl
index 325c892..72e50bb 100644
--- a/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fract/498c77.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_498c77() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl b/test/tint/builtins/gen/var/fract/958a1d.wgsl
index 187f494..dbcf68c 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(vec<3, f16>) -> vec<3, f16>
 fn fract_958a1d() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.dxc.hlsl
index 98322b9..3fd76d1 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_958a1d() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = frac(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.glsl b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.glsl
index 283602b..99bf6a5 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_958a1d() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = fract(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void fract_958a1d() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = fract(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_958a1d() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.msl b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.msl
index 745157e..1d0856f 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_958a1d() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.spvasm
index 9393329..b0a0294 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_958a1d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Fract %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Fract %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %fract_958a1d
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %fract_958a1d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %fract_958a1d
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %fract_958a1d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %fract_958a1d
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %fract_958a1d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.wgsl
index d35d4d5..e573af5 100644
--- a/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fract/958a1d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_958a1d() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl b/test/tint/builtins/gen/var/fract/eb38ce.wgsl
index 435df2c..27a5dbc 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl
@@ -25,7 +25,7 @@
 
 // fn fract(f16) -> f16
 fn fract_eb38ce() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.dxc.hlsl
index 9aa5d74..f815007 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void fract_eb38ce() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = frac(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.glsl b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.glsl
index bb43918..c463851 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_eb38ce() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = fract(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void fract_eb38ce() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = fract(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void fract_eb38ce() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.msl b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.msl
index 6ca36be..69756a8 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void fract_eb38ce() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.spvasm b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.spvasm
index 1d320c3..d618092 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %fract_eb38ce = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Fract %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Fract %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %fract_eb38ce
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %fract_eb38ce
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %fract_eb38ce
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %fract_eb38ce
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %fract_eb38ce
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %fract_eb38ce
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.wgsl b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.wgsl
index a590dae..51cf528 100644
--- a/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/fract/eb38ce.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn fract_eb38ce() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = fract(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl
index 6b40118..e04da8c 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(vec<4, f16>) -> __frexp_result_vec<4, f16>
 fn frexp_3dd21e() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl
index 557bac1..56c6bb1 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_3dd21e() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   frexp_result_vec4_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.glsl
index a1dc166..a29b54b 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_3dd21e() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   frexp_result_vec4_f16 res = tint_frexp(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void frexp_3dd21e() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   frexp_result_vec4_f16 res = tint_frexp(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void frexp_3dd21e() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   frexp_result_vec4_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.msl
index 7ca5bd7..37ac339 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_3dd21e() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   frexp_result_vec4_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.spvasm
index 70eddba..2a5ac34 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %22 = OpExtInstImport "GLSL.std.450"
+         %24 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -43,44 +43,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
         %int = OpTypeInt 32 1
       %v4int = OpTypeVector %int 4
 %__frexp_result_vec4_f16 = OpTypeStruct %v4half %v4int
 %_ptr_Function___frexp_result_vec4_f16 = OpTypePointer Function %__frexp_result_vec4_f16
-         %26 = OpConstantNull %__frexp_result_vec4_f16
-         %27 = OpTypeFunction %v4float
+         %28 = OpConstantNull %__frexp_result_vec4_f16
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_3dd21e = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function___frexp_result_vec4_f16 Function %26
-               OpStore %arg_0 %15
-         %23 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %__frexp_result_vec4_f16 %22 FrexpStruct %23
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function___frexp_result_vec4_f16 Function %28
+               OpStore %arg_0 %16
+         %25 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %__frexp_result_vec4_f16 %24 FrexpStruct %25
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %27
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %frexp_3dd21e
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %frexp_3dd21e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %33
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_3dd21e
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %frexp_3dd21e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %frexp_3dd21e
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %frexp_3dd21e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.wgsl
index 557f702..0e0a4ae 100644
--- a/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/3dd21e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_3dd21e() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl
index 9451324..f917f1f 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(f16) -> __frexp_result<f16>
 fn frexp_5257dd() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl
index b52f6d8..0cf72fb 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_5257dd() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   frexp_result_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.glsl
index 0d7e39f..21efd92 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_5257dd() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   frexp_result_f16 res = tint_frexp(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void frexp_5257dd() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   frexp_result_f16 res = tint_frexp(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void frexp_5257dd() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   frexp_result_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.msl
index 9d0edc3..d945eb6 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_5257dd() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   frexp_result_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.spvasm
index b0008a8..4c28146 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -42,43 +42,44 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
+         %17 = OpConstantNull %half
         %int = OpTypeInt 32 1
 %__frexp_result_f16 = OpTypeStruct %half %int
 %_ptr_Function___frexp_result_f16 = OpTypePointer Function %__frexp_result_f16
-         %24 = OpConstantNull %__frexp_result_f16
-         %25 = OpTypeFunction %v4float
+         %25 = OpConstantNull %__frexp_result_f16
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_5257dd = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function___frexp_result_f16 Function %24
-               OpStore %arg_0 %14
-         %21 = OpLoad %half %arg_0
-         %17 = OpExtInst %__frexp_result_f16 %20 FrexpStruct %21
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function___frexp_result_f16 Function %25
+               OpStore %arg_0 %half_0x1p_0
+         %22 = OpLoad %half %arg_0
+         %18 = OpExtInst %__frexp_result_f16 %21 FrexpStruct %22
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %frexp_5257dd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %frexp_5257dd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %frexp_5257dd
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %frexp_5257dd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %frexp_5257dd
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %frexp_5257dd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.wgsl
index 664e19a..171fbc6 100644
--- a/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/5257dd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_5257dd() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl
index 8d43e80..b2b6534 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(vec<2, f16>) -> __frexp_result_vec<2, f16>
 fn frexp_5f47bf() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl
index 478ced8..f20f1c2 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_5f47bf() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   frexp_result_vec2_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.glsl
index 2864a81..9a2f9f6 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_5f47bf() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   frexp_result_vec2_f16 res = tint_frexp(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void frexp_5f47bf() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   frexp_result_vec2_f16 res = tint_frexp(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void frexp_5f47bf() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   frexp_result_vec2_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.msl
index dfdef71..69016e4 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_5f47bf() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   frexp_result_vec2_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.spvasm
index c9c4190..5a903d4 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %22 = OpExtInstImport "GLSL.std.450"
+         %24 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -43,44 +43,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
 %__frexp_result_vec2_f16 = OpTypeStruct %v2half %v2int
 %_ptr_Function___frexp_result_vec2_f16 = OpTypePointer Function %__frexp_result_vec2_f16
-         %26 = OpConstantNull %__frexp_result_vec2_f16
-         %27 = OpTypeFunction %v4float
+         %28 = OpConstantNull %__frexp_result_vec2_f16
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_5f47bf = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function___frexp_result_vec2_f16 Function %26
-               OpStore %arg_0 %15
-         %23 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %__frexp_result_vec2_f16 %22 FrexpStruct %23
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function___frexp_result_vec2_f16 Function %28
+               OpStore %arg_0 %16
+         %25 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %__frexp_result_vec2_f16 %24 FrexpStruct %25
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %27
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %frexp_5f47bf
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %frexp_5f47bf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %33
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_5f47bf
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %frexp_5f47bf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %frexp_5f47bf
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %frexp_5f47bf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.wgsl
index 63fce21..2729282 100644
--- a/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/5f47bf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_5f47bf() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl
index e5aad68..f31850a 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl
@@ -25,7 +25,7 @@
 
 // fn frexp(vec<3, f16>) -> __frexp_result_vec<3, f16>
 fn frexp_ae4a66() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl
index 633a556..d6d7ef5 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.dxc.hlsl
@@ -10,7 +10,7 @@
 }
 
 void frexp_ae4a66() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   frexp_result_vec3_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.glsl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.glsl
index 36a4628..8cdfc7c 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void frexp_ae4a66() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   frexp_result_vec3_f16 res = tint_frexp(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void frexp_ae4a66() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   frexp_result_vec3_f16 res = tint_frexp(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void frexp_ae4a66() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   frexp_result_vec3_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.msl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.msl
index 670a534..8049342 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void frexp_ae4a66() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   frexp_result_vec3_f16 res = tint_frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.spvasm b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.spvasm
index e71e352..e52e670 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %22 = OpExtInstImport "GLSL.std.450"
+         %24 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -43,44 +43,46 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
 %__frexp_result_vec3_f16 = OpTypeStruct %v3half %v3int
 %_ptr_Function___frexp_result_vec3_f16 = OpTypePointer Function %__frexp_result_vec3_f16
-         %26 = OpConstantNull %__frexp_result_vec3_f16
-         %27 = OpTypeFunction %v4float
+         %28 = OpConstantNull %__frexp_result_vec3_f16
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %frexp_ae4a66 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function___frexp_result_vec3_f16 Function %26
-               OpStore %arg_0 %15
-         %23 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %__frexp_result_vec3_f16 %22 FrexpStruct %23
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function___frexp_result_vec3_f16 Function %28
+               OpStore %arg_0 %16
+         %25 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %__frexp_result_vec3_f16 %24 FrexpStruct %25
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %27
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %frexp_ae4a66
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %frexp_ae4a66
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %33
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %frexp_ae4a66
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %frexp_ae4a66
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %frexp_ae4a66
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %frexp_ae4a66
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.wgsl b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.wgsl
index cdbd561..d4c3cb5 100644
--- a/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/frexp/ae4a66.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn frexp_ae4a66() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res = frexp(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl
index 2464195..7263f4e 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(f16) -> f16
 fn inverseSqrt_440300() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.dxc.hlsl
index fe2cbec..806ebb4 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_440300() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.glsl b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.glsl
index d673b30..432932b 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_440300() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = inversesqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void inverseSqrt_440300() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = inversesqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_440300() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = inversesqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.msl b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.msl
index f8cd853..a0a16e0 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_440300() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.spvasm b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.spvasm
index d53e1d7..15e331c 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_440300 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 InverseSqrt %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 InverseSqrt %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %inverseSqrt_440300
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %inverseSqrt_440300
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %inverseSqrt_440300
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %inverseSqrt_440300
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %inverseSqrt_440300
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %inverseSqrt_440300
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.wgsl b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.wgsl
index f0c832a..7619128 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/440300.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_440300() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl
index e7e70aa..e098e5a 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(vec<2, f16>) -> vec<2, f16>
 fn inverseSqrt_5f51f8() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl
index 5ed334a..d8dc6a8 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_5f51f8() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.glsl b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.glsl
index 4117f6a..727f37d 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_5f51f8() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = inversesqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void inverseSqrt_5f51f8() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = inversesqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_5f51f8() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = inversesqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.msl b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.msl
index 58cd628..7b5a0fb 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_5f51f8() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.spvasm
index 3d42889..363b7d5 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_5f51f8 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 InverseSqrt %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 InverseSqrt %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %inverseSqrt_5f51f8
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %inverseSqrt_5f51f8
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %inverseSqrt_5f51f8
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %inverseSqrt_5f51f8
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %inverseSqrt_5f51f8
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %inverseSqrt_5f51f8
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.wgsl
index edabbfc..a2c5b72 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/5f51f8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_5f51f8() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl
index 4a9369f..36a3110 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(vec<3, f16>) -> vec<3, f16>
 fn inverseSqrt_b85ebd() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl
index fdeb4e8..1b3025f 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_b85ebd() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.glsl b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.glsl
index bf39272..89c20ff 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_b85ebd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = inversesqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void inverseSqrt_b85ebd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = inversesqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_b85ebd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = inversesqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.msl b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.msl
index a7f7be1..533aa98 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_b85ebd() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.spvasm
index a43efc8..f5e3311 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_b85ebd = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 InverseSqrt %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 InverseSqrt %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %inverseSqrt_b85ebd
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %inverseSqrt_b85ebd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %inverseSqrt_b85ebd
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %inverseSqrt_b85ebd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %inverseSqrt_b85ebd
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %inverseSqrt_b85ebd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.wgsl
index b53c8ee..c338e18 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/b85ebd.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_b85ebd() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl
index fdb5f64..f22ebe8 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl
@@ -25,7 +25,7 @@
 
 // fn inverseSqrt(vec<4, f16>) -> vec<4, f16>
 fn inverseSqrt_cbdc70() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl
index ae31e2e..1cb9c9f 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void inverseSqrt_cbdc70() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.glsl b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.glsl
index 5d41267..e78264c 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_cbdc70() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = inversesqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void inverseSqrt_cbdc70() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = inversesqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void inverseSqrt_cbdc70() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = inversesqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.msl b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.msl
index 0dc51ef..4563666 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void inverseSqrt_cbdc70() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = rsqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.spvasm b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.spvasm
index e476973..a3948a0 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %inverseSqrt_cbdc70 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 InverseSqrt %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 InverseSqrt %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %inverseSqrt_cbdc70
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %inverseSqrt_cbdc70
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %inverseSqrt_cbdc70
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %inverseSqrt_cbdc70
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %inverseSqrt_cbdc70
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %inverseSqrt_cbdc70
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.wgsl b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.wgsl
index f4e10cf..66a78b7 100644
--- a/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/inverseSqrt/cbdc70.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn inverseSqrt_cbdc70() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = inverseSqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl
index 86b59d2..080f54e 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(vec<2, f16>, vec<2, i32>) -> vec<2, f16>
 fn ldexp_3d90b4() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var arg_1 = vec2<i32>(1i);
   var res: vec2<f16> = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.dxc.hlsl
index 876fcb1..5cd3e0d 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_3d90b4() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   int2 arg_1 = (1).xx;
   vector<float16_t, 2> res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.glsl b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.glsl
index 13d5b89..a9ee48b 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_3d90b4() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   ivec2 arg_1 = ivec2(1);
   f16vec2 res = ldexp(arg_0, arg_1);
 }
@@ -25,7 +25,7 @@
 precision mediump float;
 
 void ldexp_3d90b4() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   ivec2 arg_1 = ivec2(1);
   f16vec2 res = ldexp(arg_0, arg_1);
 }
@@ -42,7 +42,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_3d90b4() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   ivec2 arg_1 = ivec2(1);
   f16vec2 res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.msl b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.msl
index 317c875..460fbd8 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_3d90b4() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   int2 arg_1 = int2(1);
   half2 res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.spvasm
index 61326bd..bddcfa6 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %26 = OpExtInstImport "GLSL.std.450"
+         %28 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,48 +39,50 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
         %int = OpTypeInt 32 1
       %v2int = OpTypeVector %int 2
       %int_1 = OpConstant %int 1
-         %21 = OpConstantComposite %v2int %int_1 %int_1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
 %_ptr_Function_v2int = OpTypePointer Function %v2int
-         %24 = OpConstantNull %v2int
-         %30 = OpTypeFunction %v4float
+         %26 = OpConstantNull %v2int
+         %32 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_3d90b4 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2int Function %24
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %21
-         %27 = OpLoad %v2half %arg_0
-         %28 = OpLoad %v2int %arg_1
-         %25 = OpExtInst %v2half %26 Ldexp %27 %28
-               OpStore %res %25
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2int Function %26
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %23
+         %29 = OpLoad %v2half %arg_0
+         %30 = OpLoad %v2int %arg_1
+         %27 = OpExtInst %v2half %28 Ldexp %29 %30
+               OpStore %res %27
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %ldexp_3d90b4
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %ldexp_3d90b4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %ldexp_3d90b4
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %ldexp_3d90b4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %ldexp_3d90b4
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %ldexp_3d90b4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.wgsl
index 5d9c5f8..6c02f17 100644
--- a/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/3d90b4.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_3d90b4() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var arg_1 = vec2<i32>(1i);
   var res : vec2<f16> = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl
index 6e4c0bf..e1fb3be 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(f16, i32) -> f16
 fn ldexp_624e0c() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var arg_1 = 1i;
   var res: f16 = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.dxc.hlsl
index 6c7e796..c5fc864 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_624e0c() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   int arg_1 = 1;
   float16_t res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.glsl b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.glsl
index f978069..6ab61d2 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_624e0c() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   int arg_1 = 1;
   float16_t res = ldexp(arg_0, arg_1);
 }
@@ -25,7 +25,7 @@
 precision mediump float;
 
 void ldexp_624e0c() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   int arg_1 = 1;
   float16_t res = ldexp(arg_0, arg_1);
 }
@@ -42,7 +42,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_624e0c() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   int arg_1 = 1;
   float16_t res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.msl b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.msl
index f0bc88f..2fd7f64 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_624e0c() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   int arg_1 = 1;
   half res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.spvasm
index 7fead30..d63c6af 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %24 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,46 +38,47 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
+         %17 = OpConstantNull %half
         %int = OpTypeInt 32 1
       %int_1 = OpConstant %int 1
 %_ptr_Function_int = OpTypePointer Function %int
-         %21 = OpConstantNull %int
-         %27 = OpTypeFunction %v4float
+         %22 = OpConstantNull %int
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_624e0c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_int Function %21
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_int Function %22
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
                OpStore %arg_1 %int_1
-         %24 = OpLoad %half %arg_0
-         %25 = OpLoad %int %arg_1
-         %22 = OpExtInst %half %23 Ldexp %24 %25
-               OpStore %res %22
+         %25 = OpLoad %half %arg_0
+         %26 = OpLoad %int %arg_1
+         %23 = OpExtInst %half %24 Ldexp %25 %26
+               OpStore %res %23
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %27
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %ldexp_624e0c
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %ldexp_624e0c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %33
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %ldexp_624e0c
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %ldexp_624e0c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %ldexp_624e0c
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %ldexp_624e0c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.wgsl
index 65e6d4f..d9430d8 100644
--- a/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/624e0c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_624e0c() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var arg_1 = 1i;
   var res : f16 = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl
index 8e7be97..977dba8 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(vec<3, f16>, vec<3, i32>) -> vec<3, f16>
 fn ldexp_7485ce() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var arg_1 = vec3<i32>(1i);
   var res: vec3<f16> = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.dxc.hlsl
index ca8bf2b..86c7207 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_7485ce() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   int3 arg_1 = (1).xxx;
   vector<float16_t, 3> res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.glsl b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.glsl
index 39204f5..e28e17c 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7485ce() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   ivec3 arg_1 = ivec3(1);
   f16vec3 res = ldexp(arg_0, arg_1);
 }
@@ -25,7 +25,7 @@
 precision mediump float;
 
 void ldexp_7485ce() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   ivec3 arg_1 = ivec3(1);
   f16vec3 res = ldexp(arg_0, arg_1);
 }
@@ -42,7 +42,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7485ce() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   ivec3 arg_1 = ivec3(1);
   f16vec3 res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.msl b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.msl
index 3475cb2..8802d29 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_7485ce() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   int3 arg_1 = int3(1);
   half3 res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.spvasm
index 046509c..7dc0f66 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %26 = OpExtInstImport "GLSL.std.450"
+         %28 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,48 +39,50 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
         %int = OpTypeInt 32 1
       %v3int = OpTypeVector %int 3
       %int_1 = OpConstant %int 1
-         %21 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
 %_ptr_Function_v3int = OpTypePointer Function %v3int
-         %24 = OpConstantNull %v3int
-         %30 = OpTypeFunction %v4float
+         %26 = OpConstantNull %v3int
+         %32 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_7485ce = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3int Function %24
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %21
-         %27 = OpLoad %v3half %arg_0
-         %28 = OpLoad %v3int %arg_1
-         %25 = OpExtInst %v3half %26 Ldexp %27 %28
-               OpStore %res %25
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3int Function %26
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %23
+         %29 = OpLoad %v3half %arg_0
+         %30 = OpLoad %v3int %arg_1
+         %27 = OpExtInst %v3half %28 Ldexp %29 %30
+               OpStore %res %27
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %ldexp_7485ce
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %ldexp_7485ce
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %ldexp_7485ce
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %ldexp_7485ce
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %ldexp_7485ce
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %ldexp_7485ce
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.wgsl
index 2671e2a..7b824e2 100644
--- a/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/7485ce.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_7485ce() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var arg_1 = vec3<i32>(1i);
   var res : vec3<f16> = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl
index 13ddb24..7d2dafb 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl
@@ -25,7 +25,7 @@
 
 // fn ldexp(vec<4, f16>, vec<4, i32>) -> vec<4, f16>
 fn ldexp_7fa13c() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var arg_1 = vec4<i32>(1i);
   var res: vec4<f16> = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.dxc.hlsl
index cd28414..461a1aa 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void ldexp_7fa13c() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   int4 arg_1 = (1).xxxx;
   vector<float16_t, 4> res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.glsl b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.glsl
index d447a14..8259b61 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7fa13c() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   ivec4 arg_1 = ivec4(1);
   f16vec4 res = ldexp(arg_0, arg_1);
 }
@@ -25,7 +25,7 @@
 precision mediump float;
 
 void ldexp_7fa13c() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   ivec4 arg_1 = ivec4(1);
   f16vec4 res = ldexp(arg_0, arg_1);
 }
@@ -42,7 +42,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void ldexp_7fa13c() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   ivec4 arg_1 = ivec4(1);
   f16vec4 res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.msl b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.msl
index b4089fb..4df9a39 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void ldexp_7fa13c() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   int4 arg_1 = int4(1);
   half4 res = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.spvasm
index 1b6c20a..ce3a3d9 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %26 = OpExtInstImport "GLSL.std.450"
+         %28 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,48 +39,50 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
         %int = OpTypeInt 32 1
       %v4int = OpTypeVector %int 4
       %int_1 = OpConstant %int 1
-         %21 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
 %_ptr_Function_v4int = OpTypePointer Function %v4int
-         %24 = OpConstantNull %v4int
-         %30 = OpTypeFunction %v4float
+         %26 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %ldexp_7fa13c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4int Function %24
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %21
-         %27 = OpLoad %v4half %arg_0
-         %28 = OpLoad %v4int %arg_1
-         %25 = OpExtInst %v4half %26 Ldexp %27 %28
-               OpStore %res %25
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4int Function %26
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %23
+         %29 = OpLoad %v4half %arg_0
+         %30 = OpLoad %v4int %arg_1
+         %27 = OpExtInst %v4half %28 Ldexp %29 %30
+               OpStore %res %27
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %ldexp_7fa13c
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %ldexp_7fa13c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %ldexp_7fa13c
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %ldexp_7fa13c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %ldexp_7fa13c
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %ldexp_7fa13c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.wgsl
index 910f8ea..527ff3f 100644
--- a/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/ldexp/7fa13c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn ldexp_7fa13c() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var arg_1 = vec4<i32>(1i);
   var res : vec4<f16> = ldexp(arg_0, arg_1);
 }
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl
index 6aa251c..cc5f92f 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<2, f16>) -> f16
 fn length_3f0e13() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl
index ef03b06..59d9493 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_3f0e13() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl
index a5f2471..30425e5 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_3f0e13() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl
index 797b6fb..403f079 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_3f0e13() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm
index a92c3f1..bcc5e638 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,41 +38,43 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpConstantNull %half
-         %24 = OpTypeFunction %v4float
+         %25 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_3f0e13 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_half Function %23
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %half %19 Length %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_half Function %25
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %half %21 Length %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %length_3f0e13
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %length_3f0e13
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_3f0e13
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %length_3f0e13
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl
index 317830d..aa47114 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_3f0e13() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl
index 9c495a7..629e9ce 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<4, f16>) -> f16
 fn length_5b1a9b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl
index 4865222..ff848f8 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_5b1a9b() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl
index 75b0701..0d54625 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_5b1a9b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl
index 885dd66..2b9aa9f 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_5b1a9b() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm
index 0d97afe..b880106 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,41 +38,43 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpConstantNull %half
-         %24 = OpTypeFunction %v4float
+         %25 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_5b1a9b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_half Function %23
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %half %19 Length %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_half Function %25
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %half %21 Length %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %length_5b1a9b
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %length_5b1a9b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_5b1a9b
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %length_5b1a9b
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl
index 6e0095b..c008e07 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_5b1a9b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl
index c45837e..7c69210 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<3, f16>) -> f16
 fn length_ba16d6() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl
index 7480de0..a69b529 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_ba16d6() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl
index ea04f30..f73d680 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_ba16d6() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl
index 54123fc..bb585a0 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_ba16d6() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm
index 4ec76a0..60a8f8b 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,41 +38,43 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpConstantNull %half
-         %24 = OpTypeFunction %v4float
+         %25 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_ba16d6 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_half Function %23
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %half %19 Length %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_half Function %25
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %half %21 Length %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %length_ba16d6
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %length_ba16d6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_ba16d6
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %length_ba16d6
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl
index 9ad37a9..a3dcd56 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_ba16d6() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl b/test/tint/builtins/gen/var/length/c158da.wgsl
index ce3f91f..9c175dc 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(f16) -> f16
 fn length_c158da() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl
index e8ad9f7..b3b16c3 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_c158da() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl
index 023690c..64a00e1 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_c158da() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl
index ea75d99..9854ae1 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_c158da() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm
index 5b14574..5c55dc8 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_c158da = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Length %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Length %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %length_c158da
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_c158da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %length_c158da
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_c158da
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl
index c86993b..2017cde 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_c158da() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl b/test/tint/builtins/gen/var/log/6ff86f.wgsl
index c99e55d..c4eb176 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(vec<3, f16>) -> vec<3, f16>
 fn log_6ff86f() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.dxc.hlsl
index 992df89..2ced859 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_6ff86f() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.glsl b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.glsl
index f4c8306..0431e5b 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_6ff86f() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = log(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log_6ff86f() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = log(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_6ff86f() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.msl b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.msl
index 941fcd6..3fa752c 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_6ff86f() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.spvasm
index bc7f7de..8acde47 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_6ff86f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Log %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Log %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %log_6ff86f
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %log_6ff86f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log_6ff86f
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %log_6ff86f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %log_6ff86f
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %log_6ff86f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.wgsl
index 0f1a204..7a24128 100644
--- a/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log/6ff86f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_6ff86f() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl b/test/tint/builtins/gen/var/log/8f0e32.wgsl
index 02a6f23..b7aa49d 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(vec<2, f16>) -> vec<2, f16>
 fn log_8f0e32() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.dxc.hlsl
index f17ddd1..f04a6f5 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_8f0e32() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.glsl b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.glsl
index 5ed7deb..6f6b1aa 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_8f0e32() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = log(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log_8f0e32() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = log(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_8f0e32() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.msl b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.msl
index 975ed6d..0e25caa 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_8f0e32() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.spvasm
index 06d9a8a..ac6fe38 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_8f0e32 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Log %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Log %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %log_8f0e32
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %log_8f0e32
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log_8f0e32
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %log_8f0e32
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %log_8f0e32
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %log_8f0e32
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.wgsl
index 3e83d31..fe96b0e 100644
--- a/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log/8f0e32.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_8f0e32() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl b/test/tint/builtins/gen/var/log/c9f489.wgsl
index cc94795..ed3404b 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(f16) -> f16
 fn log_c9f489() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.dxc.hlsl
index f56a6b9..b65744f 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_c9f489() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.glsl b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.glsl
index ab6cf71..94e8d4b 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_c9f489() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = log(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log_c9f489() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = log(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_c9f489() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.msl b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.msl
index 2f4c543..b2588e4 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_c9f489() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.spvasm
index c2f50ce..76e0a15 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_c9f489 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Log %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Log %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %log_c9f489
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log_c9f489
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %log_c9f489
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log_c9f489
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %log_c9f489
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log_c9f489
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.wgsl
index b4e30a3..4f9373c 100644
--- a/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log/c9f489.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_c9f489() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl b/test/tint/builtins/gen/var/log/cdbdc1.wgsl
index 18c4837..55be483 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl
@@ -25,7 +25,7 @@
 
 // fn log(vec<4, f16>) -> vec<4, f16>
 fn log_cdbdc1() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.dxc.hlsl
index 4416f3e..07574a6 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log_cdbdc1() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.glsl b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.glsl
index 8f49855..d278e67 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_cdbdc1() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = log(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log_cdbdc1() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = log(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log_cdbdc1() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.msl b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.msl
index e2e669e..3463548 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log_cdbdc1() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.spvasm
index aebc066..017227c 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %log_cdbdc1 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Log %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Log %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %log_cdbdc1
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %log_cdbdc1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log_cdbdc1
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %log_cdbdc1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %log_cdbdc1
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %log_cdbdc1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.wgsl
index 0ded928..c9f7a70 100644
--- a/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log/cdbdc1.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log_cdbdc1() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = log(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl b/test/tint/builtins/gen/var/log2/38b478.wgsl
index 9be1438..f07d42f 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(vec<3, f16>) -> vec<3, f16>
 fn log2_38b478() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.dxc.hlsl
index 78a5e05..798fd2f 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_38b478() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.glsl b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.glsl
index 3b440c8..fbf3bbf 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_38b478() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = log2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log2_38b478() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = log2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_38b478() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.msl b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.msl
index 86941bf..71d7c90 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_38b478() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.spvasm
index f44bd99..1de3931 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_38b478 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Log2 %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Log2 %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %log2_38b478
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %log2_38b478
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log2_38b478
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %log2_38b478
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %log2_38b478
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %log2_38b478
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.wgsl
index 5564f08..875fe4d 100644
--- a/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log2/38b478.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_38b478() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl b/test/tint/builtins/gen/var/log2/776088.wgsl
index cff82b7..03d3efc 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(vec<4, f16>) -> vec<4, f16>
 fn log2_776088() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.dxc.hlsl
index ddbb999..82cdfb4 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_776088() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.glsl b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.glsl
index a4c5544..c431053 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_776088() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = log2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log2_776088() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = log2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_776088() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.msl b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.msl
index 856c87b..748be70 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_776088() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.spvasm
index 0ed06cd..01c8096 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_776088 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Log2 %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Log2 %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %log2_776088
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %log2_776088
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log2_776088
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %log2_776088
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %log2_776088
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %log2_776088
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.wgsl
index 63b699d..616e82a 100644
--- a/test/tint/builtins/gen/var/log2/776088.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log2/776088.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_776088() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl b/test/tint/builtins/gen/var/log2/8c10b3.wgsl
index 7a838bd..1ce9f7c 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(f16) -> f16
 fn log2_8c10b3() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.dxc.hlsl
index 538dbfc..43eb1d1 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_8c10b3() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.glsl b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.glsl
index dc3f0f7..f05214f 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_8c10b3() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = log2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log2_8c10b3() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = log2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_8c10b3() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.msl b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.msl
index 4f7aa2e..9637f0f 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_8c10b3() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.spvasm
index f280c63..ca79600 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_8c10b3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Log2 %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Log2 %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %log2_8c10b3
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %log2_8c10b3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %log2_8c10b3
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %log2_8c10b3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %log2_8c10b3
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %log2_8c10b3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.wgsl
index 8deaff1..fab4228 100644
--- a/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log2/8c10b3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_8c10b3() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl
index 48d01f6..27b6ac1 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl
@@ -25,7 +25,7 @@
 
 // fn log2(vec<2, f16>) -> vec<2, f16>
 fn log2_fb9f0b() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.dxc.hlsl
index f99f7bf..1499535 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void log2_fb9f0b() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.glsl b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.glsl
index 0676b9f..aac760b 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_fb9f0b() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = log2(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void log2_fb9f0b() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = log2(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void log2_fb9f0b() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.msl b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.msl
index dc1c78f..4fdf2a3 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void log2_fb9f0b() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.spvasm
index 35cba68..e1d6d91 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %log2_fb9f0b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Log2 %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Log2 %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %log2_fb9f0b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %log2_fb9f0b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %log2_fb9f0b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %log2_fb9f0b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %log2_fb9f0b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %log2_fb9f0b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.wgsl
index fe9342f..1a44c5c 100644
--- a/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/log2/fb9f0b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn log2_fb9f0b() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = log2(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl b/test/tint/builtins/gen/var/max/111ac0.wgsl
index 95fe46e..58ecced 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl
@@ -25,8 +25,8 @@
 
 // fn max(f16, f16) -> f16
 fn max_111ac0() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var res: f16 = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.dxc.hlsl
index 96099f3..9307bc9 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void max_111ac0() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   float16_t res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.glsl b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.glsl
index e765053..826f121 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_111ac0() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = max(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void max_111ac0() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = max(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_111ac0() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.msl b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.msl
index 429db67..8e3b8c3 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void max_111ac0() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   half res = fmax(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.spvasm
index 379f8c7..234a5e0 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,42 +38,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_111ac0 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-         %20 = OpLoad %half %arg_0
-         %21 = OpLoad %half %arg_1
-         %18 = OpExtInst %half %19 NMax %20 %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %22 = OpLoad %half %arg_1
+         %19 = OpExtInst %half %20 NMax %21 %22
+               OpStore %res %19
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %max_111ac0
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %max_111ac0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %max_111ac0
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %max_111ac0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %max_111ac0
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %max_111ac0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.wgsl
index b91b325..db1a126 100644
--- a/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/max/111ac0.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn max_111ac0() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var res : f16 = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl b/test/tint/builtins/gen/var/max/34956e.wgsl
index 600a3eb..ce58c35 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl
@@ -25,8 +25,8 @@
 
 // fn max(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn max_34956e() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: vec2<f16> = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.dxc.hlsl
index 60c2e2f..b634c66 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void max_34956e() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.glsl b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.glsl
index 93be2e6..dfad11c 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_34956e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = max(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void max_34956e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = max(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_34956e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.msl b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.msl
index c90bfeb..506f094 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void max_34956e() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half2 res = fmax(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.spvasm
index f63b8cd..3702f75 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_34956e = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %v2half %20 NMax %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %v2half %22 NMax %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %max_34956e
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %max_34956e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %max_34956e
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %max_34956e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %max_34956e
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %max_34956e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.wgsl
index 69327a8..3499673 100644
--- a/test/tint/builtins/gen/var/max/34956e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/max/34956e.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn max_34956e() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : vec2<f16> = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl b/test/tint/builtins/gen/var/max/445169.wgsl
index 24aad61..34b6472 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl
+++ b/test/tint/builtins/gen/var/max/445169.wgsl
@@ -25,8 +25,8 @@
 
 // fn max(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn max_445169() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/max/445169.wgsl.expected.dxc.hlsl
index 4b65af3..ca512f4 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/max/445169.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void max_445169() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl.expected.glsl b/test/tint/builtins/gen/var/max/445169.wgsl.expected.glsl
index a524e0f..58502c4 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/max/445169.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_445169() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = max(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void max_445169() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = max(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_445169() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl.expected.msl b/test/tint/builtins/gen/var/max/445169.wgsl.expected.msl
index 3f2fe1e..2f8144d 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/max/445169.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void max_445169() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = fmax(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl.expected.spvasm b/test/tint/builtins/gen/var/max/445169.wgsl.expected.spvasm
index 5a3366e..6c31171 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/max/445169.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_445169 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 NMax %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 NMax %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %max_445169
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %max_445169
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %max_445169
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %max_445169
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %max_445169
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %max_445169
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/max/445169.wgsl.expected.wgsl b/test/tint/builtins/gen/var/max/445169.wgsl.expected.wgsl
index e21636f..56f7d93 100644
--- a/test/tint/builtins/gen/var/max/445169.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/max/445169.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn max_445169() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl b/test/tint/builtins/gen/var/max/e14f2b.wgsl
index 12fd3d9..c714541 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl
@@ -25,8 +25,8 @@
 
 // fn max(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn max_e14f2b() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: vec4<f16> = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.dxc.hlsl
index c0f6659..f2e6da2 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void max_e14f2b() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.glsl b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.glsl
index 9c13143..36d4e06 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_e14f2b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = max(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void max_e14f2b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = max(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void max_e14f2b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.msl b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.msl
index 4410e6f..919b3f9 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void max_e14f2b() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half4 res = fmax(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.spvasm
index 99fc971..11eb171 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %max_e14f2b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %v4half %20 NMax %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %v4half %22 NMax %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %max_e14f2b
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %max_e14f2b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %max_e14f2b
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %max_e14f2b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %max_e14f2b
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %max_e14f2b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.wgsl
index 446f509..7473f10 100644
--- a/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/max/e14f2b.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn max_e14f2b() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : vec4<f16> = max(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl b/test/tint/builtins/gen/var/min/7c710a.wgsl
index 1ccd54e..b99bb84 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl
@@ -25,8 +25,8 @@
 
 // fn min(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn min_7c710a() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: vec4<f16> = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.dxc.hlsl
index c47899a..e47cb43 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void min_7c710a() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.glsl b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.glsl
index e7acfb3..16d0a50 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_7c710a() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = min(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void min_7c710a() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = min(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_7c710a() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.msl b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.msl
index c3ccbdc..ccf9f90 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void min_7c710a() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half4 res = fmin(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.spvasm
index d8aff45..e17e61a 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_7c710a = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %v4half %20 NMin %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %v4half %22 NMin %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %min_7c710a
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %min_7c710a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %min_7c710a
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %min_7c710a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %min_7c710a
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %min_7c710a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.wgsl
index 24aba2c..4250314 100644
--- a/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/min/7c710a.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn min_7c710a() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : vec4<f16> = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl b/test/tint/builtins/gen/var/min/ab0acd.wgsl
index ea0e29c..9c0c694 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl
@@ -25,8 +25,8 @@
 
 // fn min(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn min_ab0acd() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.dxc.hlsl
index 10c5fad..75b3365 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void min_ab0acd() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.glsl b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.glsl
index a8dfcfc..98f7650 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ab0acd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = min(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void min_ab0acd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = min(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ab0acd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.msl b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.msl
index ecf13e6..970eb0f 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void min_ab0acd() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = fmin(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.spvasm
index c3695bc..497f917 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_ab0acd = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 NMin %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 NMin %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %min_ab0acd
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %min_ab0acd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %min_ab0acd
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %min_ab0acd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %min_ab0acd
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %min_ab0acd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.wgsl
index 2c94144..b0fb3b2 100644
--- a/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/min/ab0acd.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn min_ab0acd() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl b/test/tint/builtins/gen/var/min/ac84d6.wgsl
index 8166c17..a81afe6 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl
@@ -25,8 +25,8 @@
 
 // fn min(f16, f16) -> f16
 fn min_ac84d6() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var res: f16 = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.dxc.hlsl
index 62864ef..6d00fc3 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void min_ac84d6() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   float16_t res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.glsl b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.glsl
index e0ca81b..4b92b8c 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ac84d6() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = min(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void min_ac84d6() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = min(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_ac84d6() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.msl b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.msl
index c8f31e2..264a507 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void min_ac84d6() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   half res = fmin(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.spvasm
index 3f048ea8..6d286e3 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,42 +38,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_ac84d6 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-         %20 = OpLoad %half %arg_0
-         %21 = OpLoad %half %arg_1
-         %18 = OpExtInst %half %19 NMin %20 %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %22 = OpLoad %half %arg_1
+         %19 = OpExtInst %half %20 NMin %21 %22
+               OpStore %res %19
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %min_ac84d6
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %min_ac84d6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %min_ac84d6
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %min_ac84d6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %min_ac84d6
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %min_ac84d6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.wgsl
index 508794c..9654ad3 100644
--- a/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/min/ac84d6.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn min_ac84d6() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var res : f16 = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl b/test/tint/builtins/gen/var/min/e780f9.wgsl
index 58e70eb..9e11b5a 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl
@@ -25,8 +25,8 @@
 
 // fn min(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn min_e780f9() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: vec2<f16> = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.dxc.hlsl
index b2b207d..b072226 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void min_e780f9() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.glsl b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.glsl
index 7942c5e..9ffa9fe 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_e780f9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = min(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void min_e780f9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = min(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void min_e780f9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.msl b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.msl
index 49649a3..11a0d62 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void min_e780f9() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half2 res = fmin(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.spvasm
index aac4bd1..6119fe1 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %min_e780f9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %v2half %20 NMin %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %v2half %22 NMin %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %min_e780f9
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %min_e780f9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %min_e780f9
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %min_e780f9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %min_e780f9
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %min_e780f9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.wgsl
index ce1ac48..7d43618 100644
--- a/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/min/e780f9.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn min_e780f9() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : vec2<f16> = min(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl b/test/tint/builtins/gen/var/mix/38cbbb.wgsl
index c319eea..0a36f24 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(f16, f16, f16) -> f16
 fn mix_38cbbb() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
+  var arg_2 = 1.h;
   var res: f16 = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.dxc.hlsl
index a0edd4a..167fb88 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_38cbbb() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
-  float16_t arg_2 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
+  float16_t arg_2 = float16_t(1.0h);
   float16_t res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.glsl
index c5da856..a4b6259 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_38cbbb() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_38cbbb() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_38cbbb() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.msl
index 45b6845..98dc09d 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_38cbbb() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
-  half arg_2 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
+  half arg_2 = 1.0h;
   half res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.spvasm
index 601a4f8..eac22c3 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,45 +39,46 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_38cbbb = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-      %arg_2 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-               OpStore %arg_2 %14
-         %21 = OpLoad %half %arg_0
-         %22 = OpLoad %half %arg_1
-         %23 = OpLoad %half %arg_2
-         %19 = OpExtInst %half %20 FMix %21 %22 %23
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+      %arg_2 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+               OpStore %arg_2 %half_0x1p_0
+         %22 = OpLoad %half %arg_0
+         %23 = OpLoad %half %arg_1
+         %24 = OpLoad %half %arg_2
+         %20 = OpExtInst %half %21 FMix %22 %23 %24
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %mix_38cbbb
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %mix_38cbbb
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %mix_38cbbb
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %mix_38cbbb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %mix_38cbbb
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %mix_38cbbb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.wgsl
index 8905057..1da8d88 100644
--- a/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/38cbbb.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_38cbbb() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
+  var arg_2 = 1.0h;
   var res : f16 = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl b/test/tint/builtins/gen/var/mix/63f2fd.wgsl
index b68ae29..5839216 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn mix_63f2fd() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = vec3<f16>(1.h);
   var res: vec3<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.dxc.hlsl
index 64200d6..8bbc511 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_63f2fd() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_2 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_2 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.glsl
index 21b513d..9651c99 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_63f2fd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_63f2fd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_63f2fd() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.msl
index 434d37a..e738ae5 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_63f2fd() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half3 arg_2 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half3 arg_2 = half3(1.0h);
   half3 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.spvasm
index 44f6f95..e02acfa 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_63f2fd = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v3half %arg_0
-         %23 = OpLoad %v3half %arg_1
-         %24 = OpLoad %v3half %arg_2
-         %20 = OpExtInst %v3half %21 FMix %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v3half %arg_0
+         %25 = OpLoad %v3half %arg_1
+         %26 = OpLoad %v3half %arg_2
+         %22 = OpExtInst %v3half %23 FMix %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %mix_63f2fd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %mix_63f2fd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %mix_63f2fd
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %mix_63f2fd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %mix_63f2fd
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %mix_63f2fd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.wgsl
index 803966f..9475f3d 100644
--- a/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/63f2fd.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_63f2fd() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = vec3<f16>(1.0h);
   var res : vec3<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl b/test/tint/builtins/gen/var/mix/98ee3e.wgsl
index 4ad0e03..969f696 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn mix_98ee3e() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = vec2<f16>(1.h);
   var res: vec2<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.dxc.hlsl
index 4c9b6cd..77c92aa 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_98ee3e() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_2 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_2 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.glsl
index 4fe64a0..19a996c 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_98ee3e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_98ee3e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_98ee3e() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.msl
index 6dab70b..1a2c97a 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_98ee3e() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half2 arg_2 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half2 arg_2 = half2(1.0h);
   half2 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.spvasm
index 94ac72e..368245f 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_98ee3e = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v2half %arg_0
-         %23 = OpLoad %v2half %arg_1
-         %24 = OpLoad %v2half %arg_2
-         %20 = OpExtInst %v2half %21 FMix %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v2half %arg_0
+         %25 = OpLoad %v2half %arg_1
+         %26 = OpLoad %v2half %arg_2
+         %22 = OpExtInst %v2half %23 FMix %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %mix_98ee3e
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %mix_98ee3e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %mix_98ee3e
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %mix_98ee3e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %mix_98ee3e
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %mix_98ee3e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.wgsl
index 28738df..3209439 100644
--- a/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/98ee3e.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_98ee3e() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = vec2<f16>(1.0h);
   var res : vec2<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl b/test/tint/builtins/gen/var/mix/c1aec6.wgsl
index 6eabaff..b90bd7a 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(vec<3, f16>, vec<3, f16>, f16) -> vec<3, f16>
 fn mix_c1aec6() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = 1.h;
   var res: vec3<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.dxc.hlsl
index fae485c..f0543f9 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_c1aec6() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  float16_t arg_2 = float16_t(0.0h);
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  float16_t arg_2 = float16_t(1.0h);
   vector<float16_t, 3> res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.glsl
index 8eba390..f8f3e7c 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_c1aec6() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_c1aec6() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_c1aec6() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.msl
index c8161a6..2086672 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_c1aec6() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half arg_2 = 0.0h;
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half arg_2 = 1.0h;
   half3 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.spvasm
index e20acfd..3498a35 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %25 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,49 +40,51 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %19 = OpConstantNull %half
+         %19 = OpConstantNull %v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %30 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %32 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_c1aec6 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_half Function %19
-         %27 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %19
-         %24 = OpLoad %v3half %arg_0
-         %25 = OpLoad %v3half %arg_1
-         %26 = OpLoad %half %arg_2
-         %28 = OpCompositeConstruct %v3half %26 %26 %26
-         %22 = OpExtInst %v3half %23 FMix %24 %25 %28
-               OpStore %res %22
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_half Function %23
+         %29 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %half_0x1p_0
+         %26 = OpLoad %v3half %arg_0
+         %27 = OpLoad %v3half %arg_1
+         %28 = OpLoad %half %arg_2
+         %30 = OpCompositeConstruct %v3half %28 %28 %28
+         %24 = OpExtInst %v3half %25 FMix %26 %27 %30
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_c1aec6
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %mix_c1aec6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %mix_c1aec6
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %mix_c1aec6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %mix_c1aec6
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %mix_c1aec6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.wgsl
index a66c0bc..d6ceef5 100644
--- a/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/c1aec6.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_c1aec6() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = 1.0h;
   var res : vec3<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl b/test/tint/builtins/gen/var/mix/e46a83.wgsl
index 2dc7e65..76a4327 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(vec<2, f16>, vec<2, f16>, f16) -> vec<2, f16>
 fn mix_e46a83() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = 1.h;
   var res: vec2<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.dxc.hlsl
index f857864..8f93160 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_e46a83() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  float16_t arg_2 = float16_t(0.0h);
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  float16_t arg_2 = float16_t(1.0h);
   vector<float16_t, 2> res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.glsl
index 63c9a84..5669373 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_e46a83() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_e46a83() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_e46a83() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.msl
index 8fdd8f3..1909e9e 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_e46a83() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half arg_2 = 0.0h;
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half arg_2 = 1.0h;
   half2 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.spvasm
index 228e018..ef4c8f3 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %25 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,49 +40,51 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %19 = OpConstantNull %half
+         %19 = OpConstantNull %v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %30 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %32 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_e46a83 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_half Function %19
-         %27 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %19
-         %24 = OpLoad %v2half %arg_0
-         %25 = OpLoad %v2half %arg_1
-         %26 = OpLoad %half %arg_2
-         %28 = OpCompositeConstruct %v2half %26 %26
-         %22 = OpExtInst %v2half %23 FMix %24 %25 %28
-               OpStore %res %22
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_half Function %23
+         %29 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %half_0x1p_0
+         %26 = OpLoad %v2half %arg_0
+         %27 = OpLoad %v2half %arg_1
+         %28 = OpLoad %half %arg_2
+         %30 = OpCompositeConstruct %v2half %28 %28
+         %24 = OpExtInst %v2half %25 FMix %26 %27 %30
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_e46a83
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %mix_e46a83
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %mix_e46a83
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %mix_e46a83
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %mix_e46a83
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %mix_e46a83
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.wgsl
index f08146c..19cdcbf 100644
--- a/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/e46a83.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_e46a83() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = 1.0h;
   var res : vec2<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl b/test/tint/builtins/gen/var/mix/ee2468.wgsl
index 63a6075..deb9741 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn mix_ee2468() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = vec4<f16>(1.h);
   var res: vec4<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.dxc.hlsl
index 7ddd927..e557582 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_ee2468() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_2 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_2 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.glsl
index 7ca5dd0..8663a0b 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_ee2468() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_ee2468() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_ee2468() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.msl
index f08697a..5f8350d 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_ee2468() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half4 arg_2 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half4 arg_2 = half4(1.0h);
   half4 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.spvasm
index 57a262c..ba10aef 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_ee2468 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v4half %arg_0
-         %23 = OpLoad %v4half %arg_1
-         %24 = OpLoad %v4half %arg_2
-         %20 = OpExtInst %v4half %21 FMix %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v4half %arg_0
+         %25 = OpLoad %v4half %arg_1
+         %26 = OpLoad %v4half %arg_2
+         %22 = OpExtInst %v4half %23 FMix %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %mix_ee2468
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %mix_ee2468
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %mix_ee2468
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %mix_ee2468
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %mix_ee2468
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %mix_ee2468
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.wgsl
index 1ab0394..dce3429 100644
--- a/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/ee2468.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_ee2468() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = vec4<f16>(1.0h);
   var res : vec4<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl b/test/tint/builtins/gen/var/mix/f1a543.wgsl
index fc47f42..bb1271b 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl
@@ -25,9 +25,9 @@
 
 // fn mix(vec<4, f16>, vec<4, f16>, f16) -> vec<4, f16>
 fn mix_f1a543() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = 1.h;
   var res: vec4<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.dxc.hlsl
index e21963a..7eca853 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void mix_f1a543() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  float16_t arg_2 = float16_t(0.0h);
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  float16_t arg_2 = float16_t(1.0h);
   vector<float16_t, 4> res = lerp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.glsl b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.glsl
index 4b023e5..85904ca 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_f1a543() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void mix_f1a543() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void mix_f1a543() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.msl b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.msl
index 2f8163d..bc6f44d 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void mix_f1a543() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half arg_2 = 0.0h;
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half arg_2 = 1.0h;
   half4 res = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.spvasm b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.spvasm
index cd6d009..ea36681 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %25 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,49 +40,51 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %19 = OpConstantNull %half
+         %19 = OpConstantNull %v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %30 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %32 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %mix_f1a543 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_half Function %19
-         %27 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %19
-         %24 = OpLoad %v4half %arg_0
-         %25 = OpLoad %v4half %arg_1
-         %26 = OpLoad %half %arg_2
-         %28 = OpCompositeConstruct %v4half %26 %26 %26 %26
-         %22 = OpExtInst %v4half %23 FMix %24 %25 %28
-               OpStore %res %22
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_half Function %23
+         %29 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %half_0x1p_0
+         %26 = OpLoad %v4half %arg_0
+         %27 = OpLoad %v4half %arg_1
+         %28 = OpLoad %half %arg_2
+         %30 = OpCompositeConstruct %v4half %28 %28 %28 %28
+         %24 = OpExtInst %v4half %25 FMix %26 %27 %30
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %30
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %mix_f1a543
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %mix_f1a543
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %36
+         %37 = OpLabel
+         %38 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %38
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %mix_f1a543
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %mix_f1a543
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %mix_f1a543
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %mix_f1a543
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.wgsl b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.wgsl
index ee4f14c..87c061d 100644
--- a/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/mix/f1a543.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn mix_f1a543() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = 1.0h;
   var res : vec4<f16> = mix(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl b/test/tint/builtins/gen/var/modf/45005f.wgsl
index 7576567..3764709 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(vec<3, f16>) -> __modf_result_vec<3, f16>
 fn modf_45005f() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.dxc.hlsl
index e6631d3..f9a9e8d 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_45005f() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   modf_result_vec3_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.glsl
index 238c3c2..0c6aad6 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_45005f() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   modf_result_vec3_f16 res = tint_modf(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void modf_45005f() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   modf_result_vec3_f16 res = tint_modf(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void modf_45005f() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   modf_result_vec3_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.msl
index 736c945..106d1b6 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_45005f() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   modf_result_vec3_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.spvasm
index ff3de45..7c7b813 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -43,42 +43,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
 %__modf_result_vec3_f16 = OpTypeStruct %v3half %v3half
 %_ptr_Function___modf_result_vec3_f16 = OpTypePointer Function %__modf_result_vec3_f16
-         %24 = OpConstantNull %__modf_result_vec3_f16
-         %25 = OpTypeFunction %v4float
+         %26 = OpConstantNull %__modf_result_vec3_f16
+         %27 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_45005f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function___modf_result_vec3_f16 Function %24
-               OpStore %arg_0 %15
-         %21 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %__modf_result_vec3_f16 %20 ModfStruct %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function___modf_result_vec3_f16 Function %26
+               OpStore %arg_0 %16
+         %23 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %__modf_result_vec3_f16 %22 ModfStruct %23
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %modf_45005f
+%vertex_main_inner = OpFunction %v4float None %27
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %modf_45005f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %32 = OpLabel
+         %33 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %33
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_45005f
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %modf_45005f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %modf_45005f
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %modf_45005f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.wgsl
index 987ba8a..f9e08f3 100644
--- a/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/45005f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_45005f() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl
index 057c908..f3dea08 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(f16) -> __modf_result<f16>
 fn modf_8dbbbf() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.dxc.hlsl
index 53bf292..04d940b 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_8dbbbf() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   modf_result_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.glsl
index 38e8cf6..d6b8976 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_8dbbbf() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   modf_result_f16 res = tint_modf(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void modf_8dbbbf() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   modf_result_f16 res = tint_modf(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void modf_8dbbbf() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   modf_result_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.msl
index feb1621..58a30ca 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_8dbbbf() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   modf_result_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.spvasm
index d4ab1c8..28b19b0 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -42,42 +42,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
+         %17 = OpConstantNull %half
 %__modf_result_f16 = OpTypeStruct %half %half
 %_ptr_Function___modf_result_f16 = OpTypePointer Function %__modf_result_f16
-         %23 = OpConstantNull %__modf_result_f16
-         %24 = OpTypeFunction %v4float
+         %24 = OpConstantNull %__modf_result_f16
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_8dbbbf = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function___modf_result_f16 Function %23
-               OpStore %arg_0 %14
-         %20 = OpLoad %half %arg_0
-         %17 = OpExtInst %__modf_result_f16 %19 ModfStruct %20
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function___modf_result_f16 Function %24
+               OpStore %arg_0 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %18 = OpExtInst %__modf_result_f16 %20 ModfStruct %21
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %modf_8dbbbf
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %modf_8dbbbf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %modf_8dbbbf
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %modf_8dbbbf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %modf_8dbbbf
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %modf_8dbbbf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.wgsl
index 5e07687..d0815e7 100644
--- a/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/8dbbbf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_8dbbbf() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl b/test/tint/builtins/gen/var/modf/995934.wgsl
index b981c28..463335e 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(vec<4, f16>) -> __modf_result_vec<4, f16>
 fn modf_995934() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.dxc.hlsl
index ee6f076..26c46db 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_995934() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   modf_result_vec4_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.glsl
index 8bef4a7..71659e8 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_995934() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   modf_result_vec4_f16 res = tint_modf(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void modf_995934() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   modf_result_vec4_f16 res = tint_modf(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void modf_995934() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   modf_result_vec4_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.msl
index 8f32c42..1b5ebe7 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_995934() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   modf_result_vec4_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.spvasm
index ddb7405..94260c897a 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -43,42 +43,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
 %__modf_result_vec4_f16 = OpTypeStruct %v4half %v4half
 %_ptr_Function___modf_result_vec4_f16 = OpTypePointer Function %__modf_result_vec4_f16
-         %24 = OpConstantNull %__modf_result_vec4_f16
-         %25 = OpTypeFunction %v4float
+         %26 = OpConstantNull %__modf_result_vec4_f16
+         %27 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_995934 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function___modf_result_vec4_f16 Function %24
-               OpStore %arg_0 %15
-         %21 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %__modf_result_vec4_f16 %20 ModfStruct %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function___modf_result_vec4_f16 Function %26
+               OpStore %arg_0 %16
+         %23 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %__modf_result_vec4_f16 %22 ModfStruct %23
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %modf_995934
+%vertex_main_inner = OpFunction %v4float None %27
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %modf_995934
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %32 = OpLabel
+         %33 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %33
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_995934
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %modf_995934
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %modf_995934
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %modf_995934
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.wgsl
index a1ed549..317ae85 100644
--- a/test/tint/builtins/gen/var/modf/995934.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/995934.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_995934() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl b/test/tint/builtins/gen/var/modf/a545b9.wgsl
index 8911086..51895fd 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl
@@ -25,7 +25,7 @@
 
 // fn modf(vec<2, f16>) -> __modf_result_vec<2, f16>
 fn modf_a545b9() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.dxc.hlsl
index 66e40ec..47cc509 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 void modf_a545b9() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   modf_result_vec2_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.glsl b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.glsl
index 3d59c41..86f166d 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.glsl
@@ -14,7 +14,7 @@
 
 
 void modf_a545b9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   modf_result_vec2_f16 res = tint_modf(arg_0);
 }
 
@@ -48,7 +48,7 @@
 
 
 void modf_a545b9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   modf_result_vec2_f16 res = tint_modf(arg_0);
 }
 
@@ -76,7 +76,7 @@
 
 
 void modf_a545b9() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   modf_result_vec2_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.msl b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.msl
index 7330f6b..1cf4d62 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.msl
@@ -13,7 +13,7 @@
 }
 
 void modf_a545b9() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   modf_result_vec2_f16 res = tint_modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.spvasm
index a862a6c..da154ba 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -43,42 +43,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
 %__modf_result_vec2_f16 = OpTypeStruct %v2half %v2half
 %_ptr_Function___modf_result_vec2_f16 = OpTypePointer Function %__modf_result_vec2_f16
-         %24 = OpConstantNull %__modf_result_vec2_f16
-         %25 = OpTypeFunction %v4float
+         %26 = OpConstantNull %__modf_result_vec2_f16
+         %27 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %modf_a545b9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function___modf_result_vec2_f16 Function %24
-               OpStore %arg_0 %15
-         %21 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %__modf_result_vec2_f16 %20 ModfStruct %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function___modf_result_vec2_f16 Function %26
+               OpStore %arg_0 %16
+         %23 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %__modf_result_vec2_f16 %22 ModfStruct %23
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %modf_a545b9
+%vertex_main_inner = OpFunction %v4float None %27
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %modf_a545b9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %32 = OpLabel
+         %33 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %33
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %modf_a545b9
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %modf_a545b9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %modf_a545b9
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %modf_a545b9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.wgsl
index 9016659..dfb8c47 100644
--- a/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/modf/a545b9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn modf_a545b9() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res = modf(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl
index 9d4465d..35c06bf 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl
@@ -25,7 +25,7 @@
 
 // fn normalize(vec<3, f16>) -> vec<3, f16>
 fn normalize_39d5ec() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.dxc.hlsl
index 27279be..e671082 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void normalize_39d5ec() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.glsl b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.glsl
index cac08b0..0934cc3 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_39d5ec() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = normalize(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void normalize_39d5ec() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = normalize(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_39d5ec() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.msl b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.msl
index b39c9b3..3c34456 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void normalize_39d5ec() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.spvasm b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.spvasm
index 7ee6ac0..0ad6acc 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %normalize_39d5ec = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Normalize %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Normalize %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %normalize_39d5ec
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %normalize_39d5ec
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %normalize_39d5ec
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %normalize_39d5ec
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %normalize_39d5ec
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %normalize_39d5ec
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.wgsl b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.wgsl
index a1dddf1..ef253e8 100644
--- a/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/normalize/39d5ec.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn normalize_39d5ec() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl b/test/tint/builtins/gen/var/normalize/7990f3.wgsl
index 46bb41b..907a64f 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl
@@ -25,7 +25,7 @@
 
 // fn normalize(vec<2, f16>) -> vec<2, f16>
 fn normalize_7990f3() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.dxc.hlsl
index 5609e8b..4d33c76 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void normalize_7990f3() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.glsl b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.glsl
index f5baf36..f5b5264 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_7990f3() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = normalize(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void normalize_7990f3() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = normalize(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_7990f3() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.msl b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.msl
index 92d318a..db2d01b 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void normalize_7990f3() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.spvasm
index 1df719a..225a26e 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %normalize_7990f3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Normalize %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Normalize %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %normalize_7990f3
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %normalize_7990f3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %normalize_7990f3
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %normalize_7990f3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %normalize_7990f3
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %normalize_7990f3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.wgsl
index 3629918..1d9e115 100644
--- a/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/normalize/7990f3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn normalize_7990f3() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl
index ef4811d..72b994f 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl
@@ -25,7 +25,7 @@
 
 // fn normalize(vec<4, f16>) -> vec<4, f16>
 fn normalize_b8cb8d() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.dxc.hlsl
index 7a7baea..026a522 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void normalize_b8cb8d() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.glsl b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.glsl
index d578fb1..03c0cd7 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_b8cb8d() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = normalize(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void normalize_b8cb8d() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = normalize(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void normalize_b8cb8d() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.msl b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.msl
index 0534833..fdcce05 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void normalize_b8cb8d() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.spvasm
index f904ec0..c802491 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %normalize_b8cb8d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Normalize %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Normalize %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %normalize_b8cb8d
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %normalize_b8cb8d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %normalize_b8cb8d
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %normalize_b8cb8d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %normalize_b8cb8d
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %normalize_b8cb8d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.wgsl
index b4793ae..a2e6bb9 100644
--- a/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/normalize/b8cb8d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn normalize_b8cb8d() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = normalize(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl
index 86f18ee..208361a 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl
@@ -25,8 +25,8 @@
 
 // fn pow(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn pow_4f33b2() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: vec4<f16> = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.dxc.hlsl
index 227638c..6492891 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void pow_4f33b2() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.glsl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.glsl
index 5986eca..5bc4a15 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_4f33b2() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = pow(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void pow_4f33b2() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = pow(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_4f33b2() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.msl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.msl
index c9055df..18b7935 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void pow_4f33b2() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half4 res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.spvasm
index ab794c7..33e18d8 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_4f33b2 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %v4half %20 Pow %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %v4half %22 Pow %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %pow_4f33b2
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %pow_4f33b2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %pow_4f33b2
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %pow_4f33b2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %pow_4f33b2
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %pow_4f33b2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.wgsl
index 3ae3aa1..8b19afe 100644
--- a/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/pow/4f33b2.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn pow_4f33b2() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : vec4<f16> = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl
index 8ce27eb..9cdae13 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl
@@ -25,8 +25,8 @@
 
 // fn pow(f16, f16) -> f16
 fn pow_ce9ef5() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var res: f16 = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.dxc.hlsl
index 648dc41..6cab791 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void pow_ce9ef5() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   float16_t res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.glsl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.glsl
index 204e570..7a314b4 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_ce9ef5() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = pow(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void pow_ce9ef5() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = pow(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_ce9ef5() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.msl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.msl
index 53588ac..6554112 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void pow_ce9ef5() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   half res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.spvasm
index 740fe21..f2625b1 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,42 +38,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_ce9ef5 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-         %20 = OpLoad %half %arg_0
-         %21 = OpLoad %half %arg_1
-         %18 = OpExtInst %half %19 Pow %20 %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %22 = OpLoad %half %arg_1
+         %19 = OpExtInst %half %20 Pow %21 %22
+               OpStore %res %19
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %pow_ce9ef5
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %pow_ce9ef5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %pow_ce9ef5
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %pow_ce9ef5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %pow_ce9ef5
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %pow_ce9ef5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.wgsl
index da1a0f3..0030fde 100644
--- a/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/pow/ce9ef5.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn pow_ce9ef5() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var res : f16 = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl b/test/tint/builtins/gen/var/pow/f37b25.wgsl
index cdaa364..6658892 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl
@@ -25,8 +25,8 @@
 
 // fn pow(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn pow_f37b25() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: vec2<f16> = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.dxc.hlsl
index 1656a09..1b67444 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void pow_f37b25() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.glsl b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.glsl
index c666706..bd5e74c 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_f37b25() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = pow(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void pow_f37b25() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = pow(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_f37b25() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.msl b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.msl
index d608b91..7fbe58a 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void pow_f37b25() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half2 res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.spvasm b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.spvasm
index 34746c5..b83fd05 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_f37b25 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %v2half %20 Pow %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %v2half %22 Pow %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %pow_f37b25
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %pow_f37b25
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %pow_f37b25
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %pow_f37b25
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %pow_f37b25
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %pow_f37b25
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.wgsl b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.wgsl
index 9c2e6fc..f8aa5e7 100644
--- a/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/pow/f37b25.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn pow_f37b25() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : vec2<f16> = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl b/test/tint/builtins/gen/var/pow/fa5429.wgsl
index 2a6ad11..7258f43 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl
@@ -25,8 +25,8 @@
 
 // fn pow(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn pow_fa5429() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.dxc.hlsl
index fd9cab2..884d1f5 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void pow_fa5429() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.glsl b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.glsl
index c57ea28..c704188 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_fa5429() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = pow(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void pow_fa5429() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = pow(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void pow_fa5429() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.msl b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.msl
index 34042bc..9b5c0fa 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void pow_fa5429() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.spvasm b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.spvasm
index 88b8df2..7896da3 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %pow_fa5429 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 Pow %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 Pow %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %pow_fa5429
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %pow_fa5429
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %pow_fa5429
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %pow_fa5429
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %pow_fa5429
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %pow_fa5429
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.wgsl b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.wgsl
index 41114c9..0b3b9de 100644
--- a/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/pow/fa5429.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn pow_fa5429() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = pow(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl b/test/tint/builtins/gen/var/radians/208fd9.wgsl
index 5bf9902..fef9085 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(f16) -> f16
 fn radians_208fd9() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.dxc.hlsl
index 627ac2c..62ae57a 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_208fd9() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.glsl b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.glsl
index d22a648..ad613e2 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_208fd9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_radians(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void radians_208fd9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_radians(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void radians_208fd9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.msl b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.msl
index 9362203..7684ab3 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_208fd9() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.spvasm
index 40920c5..abf0521 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_208fd9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Radians %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Radians %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %radians_208fd9
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %radians_208fd9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %radians_208fd9
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %radians_208fd9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %radians_208fd9
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %radians_208fd9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.wgsl
index 9c78c61..15a8933 100644
--- a/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/radians/208fd9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_208fd9() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl b/test/tint/builtins/gen/var/radians/44f20b.wgsl
index 0cfd500..fdf2d52 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(vec<4, f16>) -> vec<4, f16>
 fn radians_44f20b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.dxc.hlsl
index 81c50d0..10ccec1 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_44f20b() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.glsl b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.glsl
index ef20747..74c7c9e 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_44f20b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_radians(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void radians_44f20b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_radians(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void radians_44f20b() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.msl b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.msl
index d2f6566..058c38e 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_44f20b() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.spvasm
index f11ab7a..7c4cd8f 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_44f20b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Radians %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Radians %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %radians_44f20b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %radians_44f20b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %radians_44f20b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %radians_44f20b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %radians_44f20b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %radians_44f20b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.wgsl
index 96830d7..c0de07d 100644
--- a/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/radians/44f20b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_44f20b() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl
index 693ec90..cce0ce0 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(vec<3, f16>) -> vec<3, f16>
 fn radians_7ea4c7() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.dxc.hlsl
index 3367a75..f2a40ae 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_7ea4c7() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.glsl b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.glsl
index 8d3f103..4faaa11 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_7ea4c7() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_radians(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void radians_7ea4c7() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_radians(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void radians_7ea4c7() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.msl b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.msl
index a77294f..08af0d8 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_7ea4c7() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.spvasm b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.spvasm
index 5177184..5348b48 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_7ea4c7 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Radians %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Radians %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %radians_7ea4c7
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %radians_7ea4c7
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %radians_7ea4c7
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %radians_7ea4c7
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %radians_7ea4c7
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %radians_7ea4c7
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.wgsl
index 2107e43..2c5ac74 100644
--- a/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/radians/7ea4c7.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_7ea4c7() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl b/test/tint/builtins/gen/var/radians/fbacf0.wgsl
index 87814c0..da67ac4 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl
@@ -25,7 +25,7 @@
 
 // fn radians(vec<2, f16>) -> vec<2, f16>
 fn radians_fbacf0() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.dxc.hlsl
index 8316865..02162ec 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 void radians_fbacf0() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.glsl b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.glsl
index f53a087..47b268d 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.glsl
@@ -7,7 +7,7 @@
 
 
 void radians_fbacf0() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_radians(arg_0);
 }
 
@@ -34,7 +34,7 @@
 
 
 void radians_fbacf0() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_radians(arg_0);
 }
 
@@ -55,7 +55,7 @@
 
 
 void radians_fbacf0() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.msl b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.msl
index 6dcfa5b..65e09d5 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.msl
@@ -7,7 +7,7 @@
 }
 
 void radians_fbacf0() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = tint_radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.spvasm b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.spvasm
index aa11ee5..76e0fb0 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %radians_fbacf0 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Radians %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Radians %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %radians_fbacf0
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %radians_fbacf0
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %radians_fbacf0
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %radians_fbacf0
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %radians_fbacf0
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %radians_fbacf0
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.wgsl b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.wgsl
index d463eb9..d155eb7 100644
--- a/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/radians/fbacf0.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn radians_fbacf0() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = radians(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl b/test/tint/builtins/gen/var/reflect/310de5.wgsl
index 6fd29f5..a354db4 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl
@@ -25,8 +25,8 @@
 
 // fn reflect(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn reflect_310de5() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: vec4<f16> = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.dxc.hlsl
index 42cc8e6..e43742c 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void reflect_310de5() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.glsl b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.glsl
index 1b9cab0..92460b0 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_310de5() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = reflect(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void reflect_310de5() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = reflect(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_310de5() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.msl b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.msl
index bc73148..682016a 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void reflect_310de5() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half4 res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.spvasm
index bcace4f..e73d061 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %reflect_310de5 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %v4half %20 Reflect %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %v4half %22 Reflect %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %reflect_310de5
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %reflect_310de5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %reflect_310de5
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %reflect_310de5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %reflect_310de5
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %reflect_310de5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.wgsl
index 09432f5..eacdcf5 100644
--- a/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/reflect/310de5.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn reflect_310de5() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : vec4<f16> = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl b/test/tint/builtins/gen/var/reflect/61ca21.wgsl
index f7ae376..8db93dc 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl
@@ -25,8 +25,8 @@
 
 // fn reflect(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn reflect_61ca21() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.dxc.hlsl
index 75d4007..83cb3d7 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void reflect_61ca21() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.glsl b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.glsl
index ab22f2d..c7865a3 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_61ca21() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = reflect(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void reflect_61ca21() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = reflect(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_61ca21() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.msl b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.msl
index 7ffb26a..630d7d8 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void reflect_61ca21() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.spvasm b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.spvasm
index ad8f002..c44d319 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %reflect_61ca21 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 Reflect %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 Reflect %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %reflect_61ca21
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %reflect_61ca21
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %reflect_61ca21
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %reflect_61ca21
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %reflect_61ca21
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %reflect_61ca21
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.wgsl b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.wgsl
index c7e04a8..312bd78 100644
--- a/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/reflect/61ca21.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn reflect_61ca21() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl
index ae704f4..530f7e3 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl
@@ -25,8 +25,8 @@
 
 // fn reflect(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn reflect_bb15ac() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: vec2<f16> = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.dxc.hlsl
index 445e4f2..af87c6f 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void reflect_bb15ac() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.glsl b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.glsl
index a52e6db..6c0db69 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_bb15ac() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = reflect(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void reflect_bb15ac() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = reflect(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void reflect_bb15ac() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.msl b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.msl
index bee45f3..ea9a2f4 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void reflect_bb15ac() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half2 res = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.spvasm b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.spvasm
index 9af402b..3cd3744 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %reflect_bb15ac = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %v2half %20 Reflect %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %v2half %22 Reflect %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %reflect_bb15ac
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %reflect_bb15ac
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %reflect_bb15ac
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %reflect_bb15ac
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %reflect_bb15ac
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %reflect_bb15ac
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.wgsl b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.wgsl
index 68a49b2..a92b1de 100644
--- a/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/reflect/bb15ac.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn reflect_bb15ac() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : vec2<f16> = reflect(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl b/test/tint/builtins/gen/var/refract/0594ba.wgsl
index f683301..b78b564 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl
@@ -25,9 +25,9 @@
 
 // fn refract(vec<4, f16>, vec<4, f16>, f16) -> vec<4, f16>
 fn refract_0594ba() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = 1.h;
   var res: vec4<f16> = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.dxc.hlsl
index 463d65f..3d07673 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void refract_0594ba() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  float16_t arg_2 = float16_t(0.0h);
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  float16_t arg_2 = float16_t(1.0h);
   vector<float16_t, 4> res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.glsl b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.glsl
index cd98e86..149be20 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_0594ba() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec4 res = refract(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void refract_0594ba() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec4 res = refract(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_0594ba() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec4 res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.msl b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.msl
index d0cb126..19e502d 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void refract_0594ba() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half arg_2 = 0.0h;
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half arg_2 = 1.0h;
   half4 res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.spvasm b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.spvasm
index c8b16c6..e55d03f 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 42
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %25 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,47 +40,49 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %19 = OpConstantNull %half
+         %19 = OpConstantNull %v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %28 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %30 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %refract_0594ba = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_half Function %19
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %19
-         %24 = OpLoad %v4half %arg_0
-         %25 = OpLoad %v4half %arg_1
-         %26 = OpLoad %half %arg_2
-         %22 = OpExtInst %v4half %23 Refract %24 %25 %26
-               OpStore %res %22
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_half Function %23
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %half_0x1p_0
+         %26 = OpLoad %v4half %arg_0
+         %27 = OpLoad %v4half %arg_1
+         %28 = OpLoad %half %arg_2
+         %24 = OpExtInst %v4half %25 Refract %26 %27 %28
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %28
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %refract_0594ba
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %refract_0594ba
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %34
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %refract_0594ba
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %refract_0594ba
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %refract_0594ba
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %refract_0594ba
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.wgsl b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.wgsl
index d015c26..71253e2 100644
--- a/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/refract/0594ba.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn refract_0594ba() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = 1.0h;
   var res : vec4<f16> = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl b/test/tint/builtins/gen/var/refract/570cb3.wgsl
index 1c5b953..258400f 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl
@@ -25,9 +25,9 @@
 
 // fn refract(vec<2, f16>, vec<2, f16>, f16) -> vec<2, f16>
 fn refract_570cb3() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = 1.h;
   var res: vec2<f16> = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.dxc.hlsl
index 63ce95b..baacca5 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void refract_570cb3() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  float16_t arg_2 = float16_t(0.0h);
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  float16_t arg_2 = float16_t(1.0h);
   vector<float16_t, 2> res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.glsl b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.glsl
index 16ff162..500142c 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_570cb3() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec2 res = refract(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void refract_570cb3() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec2 res = refract(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_570cb3() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec2 res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.msl b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.msl
index 2051a9c..c0c6968 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void refract_570cb3() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half arg_2 = 0.0h;
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half arg_2 = 1.0h;
   half2 res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.spvasm
index d7c52d7..41b402f 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 42
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %25 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,47 +40,49 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %19 = OpConstantNull %half
+         %19 = OpConstantNull %v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %28 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %30 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %refract_570cb3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_half Function %19
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %19
-         %24 = OpLoad %v2half %arg_0
-         %25 = OpLoad %v2half %arg_1
-         %26 = OpLoad %half %arg_2
-         %22 = OpExtInst %v2half %23 Refract %24 %25 %26
-               OpStore %res %22
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_half Function %23
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %half_0x1p_0
+         %26 = OpLoad %v2half %arg_0
+         %27 = OpLoad %v2half %arg_1
+         %28 = OpLoad %half %arg_2
+         %24 = OpExtInst %v2half %25 Refract %26 %27 %28
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %28
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %refract_570cb3
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %refract_570cb3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %34
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %refract_570cb3
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %refract_570cb3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %refract_570cb3
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %refract_570cb3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.wgsl
index 8e2895c..8d79962 100644
--- a/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/refract/570cb3.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn refract_570cb3() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = 1.0h;
   var res : vec2<f16> = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl b/test/tint/builtins/gen/var/refract/8984af.wgsl
index 1aa6ded..00be9d5 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl
@@ -25,9 +25,9 @@
 
 // fn refract(vec<3, f16>, vec<3, f16>, f16) -> vec<3, f16>
 fn refract_8984af() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = 1.h;
   var res: vec3<f16> = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.dxc.hlsl
index 4c8b3e4..c8cf77a 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void refract_8984af() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  float16_t arg_2 = float16_t(0.0h);
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  float16_t arg_2 = float16_t(1.0h);
   vector<float16_t, 3> res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.glsl b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.glsl
index c44741e..7a086c4 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_8984af() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec3 res = refract(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void refract_8984af() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec3 res = refract(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void refract_8984af() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  float16_t arg_2 = 0.0hf;
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  float16_t arg_2 = 1.0hf;
   f16vec3 res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.msl b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.msl
index 8394944..c5919df 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void refract_8984af() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half arg_2 = 0.0h;
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half arg_2 = 1.0h;
   half3 res = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.spvasm b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.spvasm
index 4fd9ba8..a85e642 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 42
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %23 = OpExtInstImport "GLSL.std.450"
+         %25 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,47 +40,49 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %19 = OpConstantNull %half
+         %19 = OpConstantNull %v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %28 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %30 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %refract_8984af = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_half Function %19
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %19
-         %24 = OpLoad %v3half %arg_0
-         %25 = OpLoad %v3half %arg_1
-         %26 = OpLoad %half %arg_2
-         %22 = OpExtInst %v3half %23 Refract %24 %25 %26
-               OpStore %res %22
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_half Function %23
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %half_0x1p_0
+         %26 = OpLoad %v3half %arg_0
+         %27 = OpLoad %v3half %arg_1
+         %28 = OpLoad %half %arg_2
+         %24 = OpExtInst %v3half %25 Refract %26 %27 %28
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %28
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %refract_8984af
+%vertex_main_inner = OpFunction %v4float None %30
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %refract_8984af
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %34
+         %35 = OpLabel
+         %36 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %36
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %refract_8984af
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %refract_8984af
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %refract_8984af
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %refract_8984af
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.wgsl b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.wgsl
index 69d2b2f..66bd307 100644
--- a/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/refract/8984af.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn refract_8984af() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = f16();
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = 1.0h;
   var res : vec3<f16> = refract(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl b/test/tint/builtins/gen/var/round/9078ef.wgsl
index e52a222..4ae932d 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(f16) -> f16
 fn round_9078ef() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.dxc.hlsl
index cc87dbb..8f39c83 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_9078ef() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.glsl b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.glsl
index 0c0cd16..ac20d8b 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_9078ef() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = round(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void round_9078ef() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = round(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_9078ef() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.msl b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.msl
index c7e44da..f4e67a5 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_9078ef() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = rint(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.spvasm b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.spvasm
index a5304a4..87ef5e0 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_9078ef = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 RoundEven %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 RoundEven %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %round_9078ef
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %round_9078ef
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %round_9078ef
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %round_9078ef
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %round_9078ef
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %round_9078ef
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.wgsl b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.wgsl
index 9a6439d..15ed50a 100644
--- a/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/round/9078ef.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_9078ef() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl b/test/tint/builtins/gen/var/round/d87e84.wgsl
index d130d956..6222d31 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(vec<2, f16>) -> vec<2, f16>
 fn round_d87e84() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.dxc.hlsl
index 0c4ec1d..e72f501 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_d87e84() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.glsl b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.glsl
index bb031c3..d6b52fb 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_d87e84() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = round(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void round_d87e84() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = round(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_d87e84() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.msl b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.msl
index 70a4f41b..9fb5419 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_d87e84() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = rint(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.spvasm b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.spvasm
index a6956ed..ff7f597 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_d87e84 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 RoundEven %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 RoundEven %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %round_d87e84
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %round_d87e84
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %round_d87e84
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %round_d87e84
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %round_d87e84
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %round_d87e84
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.wgsl b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.wgsl
index 8911fc3..b656f4b 100644
--- a/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/round/d87e84.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_d87e84() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl b/test/tint/builtins/gen/var/round/e1bba2.wgsl
index a4494e2..acf1e62 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(vec<3, f16>) -> vec<3, f16>
 fn round_e1bba2() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.dxc.hlsl
index 073bbfd..09aae22 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_e1bba2() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.glsl b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.glsl
index 421df9b..0692769 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_e1bba2() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = round(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void round_e1bba2() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = round(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_e1bba2() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.msl b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.msl
index 06bb618..e16a543 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_e1bba2() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = rint(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.spvasm
index 31be1c9..8e954d4 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_e1bba2 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 RoundEven %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 RoundEven %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %round_e1bba2
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %round_e1bba2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %round_e1bba2
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %round_e1bba2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %round_e1bba2
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %round_e1bba2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.wgsl
index bd41b19..05487ef 100644
--- a/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/round/e1bba2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_e1bba2() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl b/test/tint/builtins/gen/var/round/f665b5.wgsl
index 8297439..317440f 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl
@@ -25,7 +25,7 @@
 
 // fn round(vec<4, f16>) -> vec<4, f16>
 fn round_f665b5() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.dxc.hlsl
index 360cf4a..169bed8 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void round_f665b5() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.glsl b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.glsl
index d78cc6a..a9df115 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_f665b5() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = round(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void round_f665b5() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = round(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void round_f665b5() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.msl b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.msl
index fb7f28a..0334eae 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void round_f665b5() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = rint(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm
index 7eea884..225b5f2 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %round_f665b5 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 RoundEven %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 RoundEven %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %round_f665b5
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %round_f665b5
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %round_f665b5
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %round_f665b5
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %round_f665b5
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %round_f665b5
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.wgsl
index b6afe2b..a4fd853 100644
--- a/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/round/f665b5.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn round_f665b5() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = round(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl b/test/tint/builtins/gen/var/saturate/462535.wgsl
index 36b4dc6..7ab447b 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(vec<3, f16>) -> vec<3, f16>
 fn saturate_462535() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(2.h);
   var res: vec3<f16> = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.dxc.hlsl
index c3fbead..c7862df 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_462535() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(2.0h)).xxx;
   vector<float16_t, 3> res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.glsl b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.glsl
index 4573e51..411803d 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void saturate_462535() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(2.0hf);
   f16vec3 res = tint_saturate(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void saturate_462535() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(2.0hf);
   f16vec3 res = tint_saturate(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void saturate_462535() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(2.0hf);
   f16vec3 res = tint_saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.msl b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.msl
index ed61aee..d37a009 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_462535() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(2.0h);
   half3 res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.spvasm b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.spvasm
index aca7740..02fb93d 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -44,8 +44,10 @@
          %19 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
        %void = OpTypeVoid
          %20 = OpTypeFunction %void
+%half_0x1p_1 = OpConstant %half 0x1p+1
+         %25 = OpConstantComposite %v3half %half_0x1p_1 %half_0x1p_1 %half_0x1p_1
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %29 = OpTypeFunction %v4float
+         %31 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tint_saturate = OpFunction %v3half None %9
           %v = OpFunctionParameter %v3half
@@ -57,31 +59,31 @@
          %23 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v3half Function %17
         %res = OpVariable %_ptr_Function_v3half Function %17
-               OpStore %arg_0 %17
-         %27 = OpLoad %v3half %arg_0
-         %26 = OpFunctionCall %v3half %tint_saturate %27
-               OpStore %res %26
+               OpStore %arg_0 %25
+         %29 = OpLoad %v3half %arg_0
+         %28 = OpFunctionCall %v3half %tint_saturate %29
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %saturate_462535
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %saturate_462535
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %20
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %20
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %saturate_462535
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %saturate_462535
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %20
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %saturate_462535
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %saturate_462535
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.wgsl
index daeef2c..3b7c1e5 100644
--- a/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/462535.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_462535() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(2.0h);
   var res : vec3<f16> = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl b/test/tint/builtins/gen/var/saturate/cd2028.wgsl
index 72126ab..7fd2b6d 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(vec<2, f16>) -> vec<2, f16>
 fn saturate_cd2028() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(2.h);
   var res: vec2<f16> = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.dxc.hlsl
index 2af4bc5..2aa5970 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_cd2028() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(2.0h)).xx;
   vector<float16_t, 2> res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.glsl b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.glsl
index eba552b..3ccd12e 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void saturate_cd2028() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(2.0hf);
   f16vec2 res = tint_saturate(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void saturate_cd2028() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(2.0hf);
   f16vec2 res = tint_saturate(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void saturate_cd2028() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(2.0hf);
   f16vec2 res = tint_saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.msl b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.msl
index 688aede9..6e99b73 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_cd2028() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(2.0h);
   half2 res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.spvasm b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.spvasm
index f37df71..9f9cc1b 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -44,8 +44,10 @@
          %19 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
        %void = OpTypeVoid
          %20 = OpTypeFunction %void
+%half_0x1p_1 = OpConstant %half 0x1p+1
+         %25 = OpConstantComposite %v2half %half_0x1p_1 %half_0x1p_1
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %29 = OpTypeFunction %v4float
+         %31 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tint_saturate = OpFunction %v2half None %9
           %v = OpFunctionParameter %v2half
@@ -57,31 +59,31 @@
          %23 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v2half Function %17
         %res = OpVariable %_ptr_Function_v2half Function %17
-               OpStore %arg_0 %17
-         %27 = OpLoad %v2half %arg_0
-         %26 = OpFunctionCall %v2half %tint_saturate %27
-               OpStore %res %26
+               OpStore %arg_0 %25
+         %29 = OpLoad %v2half %arg_0
+         %28 = OpFunctionCall %v2half %tint_saturate %29
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %saturate_cd2028
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %saturate_cd2028
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %20
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %20
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %saturate_cd2028
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %saturate_cd2028
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %20
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %saturate_cd2028
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %saturate_cd2028
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.wgsl
index 70fa7d7..99c183e 100644
--- a/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/cd2028.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_cd2028() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(2.0h);
   var res : vec2<f16> = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl b/test/tint/builtins/gen/var/saturate/dcde71.wgsl
index 7e6b153..3fce2f8 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(vec<4, f16>) -> vec<4, f16>
 fn saturate_dcde71() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(2.h);
   var res: vec4<f16> = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.dxc.hlsl
index a21b733..36d0301 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_dcde71() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(2.0h)).xxxx;
   vector<float16_t, 4> res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.glsl b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.glsl
index db950e9..e206c34 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void saturate_dcde71() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(2.0hf);
   f16vec4 res = tint_saturate(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void saturate_dcde71() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(2.0hf);
   f16vec4 res = tint_saturate(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void saturate_dcde71() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(2.0hf);
   f16vec4 res = tint_saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.msl b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.msl
index 5be881e..09a1cf9 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_dcde71() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(2.0h);
   half4 res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.spvasm b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.spvasm
index 7b46458..d426936 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 45
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -44,8 +44,10 @@
          %19 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
        %void = OpTypeVoid
          %20 = OpTypeFunction %void
+%half_0x1p_1 = OpConstant %half 0x1p+1
+         %25 = OpConstantComposite %v4half %half_0x1p_1 %half_0x1p_1 %half_0x1p_1 %half_0x1p_1
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %29 = OpTypeFunction %v4float
+         %31 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tint_saturate = OpFunction %v4half None %9
           %v = OpFunctionParameter %v4half
@@ -57,31 +59,31 @@
          %23 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v4half Function %17
         %res = OpVariable %_ptr_Function_v4half Function %17
-               OpStore %arg_0 %17
-         %27 = OpLoad %v4half %arg_0
-         %26 = OpFunctionCall %v4half %tint_saturate %27
-               OpStore %res %26
+               OpStore %arg_0 %25
+         %29 = OpLoad %v4half %arg_0
+         %28 = OpFunctionCall %v4half %tint_saturate %29
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %saturate_dcde71
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %saturate_dcde71
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %20
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %20
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %saturate_dcde71
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %saturate_dcde71
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %20
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %saturate_dcde71
+         %43 = OpLabel
+         %44 = OpFunctionCall %void %saturate_dcde71
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.wgsl
index 611b6b1..ed3ba5d 100644
--- a/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/dcde71.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_dcde71() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(2.0h);
   var res : vec4<f16> = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl b/test/tint/builtins/gen/var/saturate/e8df56.wgsl
index 85784b5..7bbe656 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl
@@ -25,7 +25,7 @@
 
 // fn saturate(f16) -> f16
 fn saturate_e8df56() {
-  var arg_0 = f16();
+  var arg_0 = 2.h;
   var res: f16 = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.dxc.hlsl
index 5a621d1..6084be0 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void saturate_e8df56() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(2.0h);
   float16_t res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.glsl b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.glsl
index 620eae5..fb11511 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 }
 
 void saturate_e8df56() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 2.0hf;
   float16_t res = tint_saturate(arg_0);
 }
 
@@ -32,7 +32,7 @@
 }
 
 void saturate_e8df56() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 2.0hf;
   float16_t res = tint_saturate(arg_0);
 }
 
@@ -52,7 +52,7 @@
 }
 
 void saturate_e8df56() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 2.0hf;
   float16_t res = tint_saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.msl b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.msl
index 1455efd..b3313d9 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void saturate_e8df56() {
-  half arg_0 = 0.0h;
+  half arg_0 = 2.0h;
   half res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.spvasm b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.spvasm
index f31e398..57db5b4 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -42,8 +42,9 @@
 %half_0x1p_0 = OpConstant %half 0x1p+0
        %void = OpTypeVoid
          %18 = OpTypeFunction %void
+%half_0x1p_1 = OpConstant %half 0x1p+1
 %_ptr_Function_half = OpTypePointer Function %half
-         %27 = OpTypeFunction %v4float
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tint_saturate = OpFunction %half None %9
           %v = OpFunctionParameter %half
@@ -55,31 +56,31 @@
          %21 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_half Function %16
         %res = OpVariable %_ptr_Function_half Function %16
-               OpStore %arg_0 %16
-         %25 = OpLoad %half %arg_0
-         %24 = OpFunctionCall %half %tint_saturate %25
-               OpStore %res %24
+               OpStore %arg_0 %half_0x1p_1
+         %26 = OpLoad %half %arg_0
+         %25 = OpFunctionCall %half %tint_saturate %26
+               OpStore %res %25
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %27
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %saturate_e8df56
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %saturate_e8df56
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %18
-         %32 = OpLabel
-         %33 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %33
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %18
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %saturate_e8df56
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %saturate_e8df56
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %18
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %saturate_e8df56
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %saturate_e8df56
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.wgsl
index 1c5effb..111db59 100644
--- a/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/e8df56.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn saturate_e8df56() {
-  var arg_0 = f16();
+  var arg_0 = 2.0h;
   var res : f16 = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl b/test/tint/builtins/gen/var/select/10e73b.wgsl
index 9362b80..6f51852 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(f16, f16, bool) -> f16
 fn select_10e73b() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var arg_2 = true;
   var res: f16 = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.dxc.hlsl
index db83290..8a7cabf 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_10e73b() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   bool arg_2 = true;
   float16_t res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.glsl
index aa73828..4ceb10b 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_10e73b() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   bool arg_2 = true;
   float16_t res = (arg_2 ? arg_1 : arg_0);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_10e73b() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   bool arg_2 = true;
   float16_t res = (arg_2 ? arg_1 : arg_0);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_10e73b() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   bool arg_2 = true;
   float16_t res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.msl b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.msl
index f643c29..a085f08 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_10e73b() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   bool arg_2 = true;
   half res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.spvasm
index 6f8609b..7ecaa7b 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 42
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,49 +38,50 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
+         %17 = OpConstantNull %half
        %bool = OpTypeBool
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
-         %22 = OpConstantNull %bool
-         %28 = OpTypeFunction %v4float
+         %23 = OpConstantNull %bool
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_10e73b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-      %arg_2 = OpVariable %_ptr_Function_bool Function %22
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+      %arg_2 = OpVariable %_ptr_Function_bool Function %23
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
                OpStore %arg_2 %true
-         %24 = OpLoad %bool %arg_2
-         %25 = OpLoad %half %arg_1
-         %26 = OpLoad %half %arg_0
-         %23 = OpSelect %half %24 %25 %26
-               OpStore %res %23
+         %25 = OpLoad %bool %arg_2
+         %26 = OpLoad %half %arg_1
+         %27 = OpLoad %half %arg_0
+         %24 = OpSelect %half %25 %26 %27
+               OpStore %res %24
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %28
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_10e73b
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %select_10e73b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %34
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %select_10e73b
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_10e73b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %select_10e73b
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_10e73b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.wgsl
index a4cd0fc..aff79a1 100644
--- a/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/10e73b.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_10e73b() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var arg_2 = true;
   var res : f16 = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl b/test/tint/builtins/gen/var/select/1ada2a.wgsl
index 421c3ee..0af5544 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(vec<3, f16>, vec<3, f16>, bool) -> vec<3, f16>
 fn select_1ada2a() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var arg_2 = true;
   var res: vec3<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.dxc.hlsl
index cdb717c..58add5f 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_1ada2a() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   bool arg_2 = true;
   vector<float16_t, 3> res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.glsl
index 6111b1e..48d699f 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_1ada2a() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   bool arg_2 = true;
   f16vec3 res = (arg_2 ? arg_1 : arg_0);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_1ada2a() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   bool arg_2 = true;
   f16vec3 res = (arg_2 ? arg_1 : arg_0);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_1ada2a() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   bool arg_2 = true;
   f16vec3 res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.msl b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.msl
index 3f23636..83e1b0f 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_1ada2a() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   bool arg_2 = true;
   half3 res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.spvasm
index efd6a0a..7f9c734 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,54 +39,56 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
        %bool = OpTypeBool
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
+         %25 = OpConstantNull %bool
      %v3bool = OpTypeVector %bool 3
 %_ptr_Function_v3bool = OpTypePointer Function %v3bool
-         %31 = OpConstantNull %v3bool
-         %34 = OpTypeFunction %v4float
+         %33 = OpConstantNull %v3bool
+         %36 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_1ada2a = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_bool Function %23
-         %29 = OpVariable %_ptr_Function_v3bool Function %31
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_bool Function %25
+         %31 = OpVariable %_ptr_Function_v3bool Function %33
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
                OpStore %arg_2 %true
-         %25 = OpLoad %bool %arg_2
-         %26 = OpLoad %v3half %arg_1
-         %27 = OpLoad %v3half %arg_0
-         %32 = OpCompositeConstruct %v3bool %25 %25 %25
-         %24 = OpSelect %v3half %32 %26 %27
-               OpStore %res %24
+         %27 = OpLoad %bool %arg_2
+         %28 = OpLoad %v3half %arg_1
+         %29 = OpLoad %v3half %arg_0
+         %34 = OpCompositeConstruct %v3bool %27 %27 %27
+         %26 = OpSelect %v3half %34 %28 %29
+               OpStore %res %26
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %select_1ada2a
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_1ada2a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %40
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %select_1ada2a
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %select_1ada2a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %select_1ada2a
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %select_1ada2a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.wgsl
index 89e258c..59b0b8b 100644
--- a/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/1ada2a.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_1ada2a() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var arg_2 = true;
   var res : vec3<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl b/test/tint/builtins/gen/var/select/53d518.wgsl
index 9f43aa8..0c5bfc8 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(vec<3, f16>, vec<3, f16>, vec<3, bool>) -> vec<3, f16>
 fn select_53d518() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var arg_2 = vec3<bool>(true);
   var res: vec3<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.dxc.hlsl
index a04ba39..130b0ce 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_53d518() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   bool3 arg_2 = (true).xxx;
   vector<float16_t, 3> res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.glsl
index 496678a..969204f 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_53d518() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   bvec3 arg_2 = bvec3(true);
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_53d518() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   bvec3 arg_2 = bvec3(true);
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_53d518() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   bvec3 arg_2 = bvec3(true);
   f16vec3 res = mix(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.msl b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.msl
index cc5db04..113cf61 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_53d518() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   bool3 arg_2 = bool3(true);
   half3 res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.spvasm
index e2bd1a5..11f9b70 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 47
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,51 +39,53 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
+         %19 = OpConstantNull %v3half
        %bool = OpTypeBool
      %v3bool = OpTypeVector %bool 3
        %true = OpConstantTrue %bool
-         %22 = OpConstantComposite %v3bool %true %true %true
+         %24 = OpConstantComposite %v3bool %true %true %true
 %_ptr_Function_v3bool = OpTypePointer Function %v3bool
-         %25 = OpConstantNull %v3bool
-         %31 = OpTypeFunction %v4float
+         %27 = OpConstantNull %v3bool
+         %33 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_53d518 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v3bool Function %25
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %22
-         %27 = OpLoad %v3bool %arg_2
-         %28 = OpLoad %v3half %arg_1
-         %29 = OpLoad %v3half %arg_0
-         %26 = OpSelect %v3half %27 %28 %29
-               OpStore %res %26
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v3bool Function %27
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %24
+         %29 = OpLoad %v3bool %arg_2
+         %30 = OpLoad %v3half %arg_1
+         %31 = OpLoad %v3half %arg_0
+         %28 = OpSelect %v3half %29 %30 %31
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %select_53d518
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %select_53d518
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %select_53d518
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %select_53d518
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %select_53d518
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %select_53d518
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.wgsl
index 8c40bca..ef25de8 100644
--- a/test/tint/builtins/gen/var/select/53d518.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/53d518.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_53d518() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var arg_2 = vec3<bool>(true);
   var res : vec3<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl b/test/tint/builtins/gen/var/select/830dd9.wgsl
index 596c536..9b0b560 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(vec<4, f16>, vec<4, f16>, bool) -> vec<4, f16>
 fn select_830dd9() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var arg_2 = true;
   var res: vec4<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.dxc.hlsl
index 6cf31e5..890f9b9 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_830dd9() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   bool arg_2 = true;
   vector<float16_t, 4> res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.glsl
index 76d5e54..91f87b0 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_830dd9() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   bool arg_2 = true;
   f16vec4 res = (arg_2 ? arg_1 : arg_0);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_830dd9() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   bool arg_2 = true;
   f16vec4 res = (arg_2 ? arg_1 : arg_0);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_830dd9() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   bool arg_2 = true;
   f16vec4 res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.msl b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.msl
index e9b5d67..6c7ba53 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_830dd9() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   bool arg_2 = true;
   half4 res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.spvasm
index c099ce9..c45ef5d 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,54 +39,56 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
        %bool = OpTypeBool
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
+         %25 = OpConstantNull %bool
      %v4bool = OpTypeVector %bool 4
 %_ptr_Function_v4bool = OpTypePointer Function %v4bool
-         %31 = OpConstantNull %v4bool
-         %34 = OpTypeFunction %v4float
+         %33 = OpConstantNull %v4bool
+         %36 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_830dd9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_bool Function %23
-         %29 = OpVariable %_ptr_Function_v4bool Function %31
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_bool Function %25
+         %31 = OpVariable %_ptr_Function_v4bool Function %33
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
                OpStore %arg_2 %true
-         %25 = OpLoad %bool %arg_2
-         %26 = OpLoad %v4half %arg_1
-         %27 = OpLoad %v4half %arg_0
-         %32 = OpCompositeConstruct %v4bool %25 %25 %25 %25
-         %24 = OpSelect %v4half %32 %26 %27
-               OpStore %res %24
+         %27 = OpLoad %bool %arg_2
+         %28 = OpLoad %v4half %arg_1
+         %29 = OpLoad %v4half %arg_0
+         %34 = OpCompositeConstruct %v4bool %27 %27 %27 %27
+         %26 = OpSelect %v4half %34 %28 %29
+               OpStore %res %26
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %select_830dd9
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_830dd9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %40
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %select_830dd9
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %select_830dd9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %select_830dd9
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %select_830dd9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.wgsl
index d1a0be6..5f7afc7 100644
--- a/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/830dd9.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_830dd9() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var arg_2 = true;
   var res : vec4<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl b/test/tint/builtins/gen/var/select/86f9bd.wgsl
index fcf7755..626b415 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(vec<2, f16>, vec<2, f16>, bool) -> vec<2, f16>
 fn select_86f9bd() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var arg_2 = true;
   var res: vec2<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.dxc.hlsl
index b0d16c2..ce7f4ee 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_86f9bd() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   bool arg_2 = true;
   vector<float16_t, 2> res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.glsl
index 6217049..c39942a 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_86f9bd() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   bool arg_2 = true;
   f16vec2 res = (arg_2 ? arg_1 : arg_0);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_86f9bd() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   bool arg_2 = true;
   f16vec2 res = (arg_2 ? arg_1 : arg_0);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_86f9bd() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   bool arg_2 = true;
   f16vec2 res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.msl b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.msl
index 1ff9477..8ba3008 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_86f9bd() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   bool arg_2 = true;
   half2 res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.spvasm
index cfb8b98..697e75c 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 48
+; Bound: 50
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,54 +39,56 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
        %bool = OpTypeBool
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
-         %23 = OpConstantNull %bool
+         %25 = OpConstantNull %bool
      %v2bool = OpTypeVector %bool 2
 %_ptr_Function_v2bool = OpTypePointer Function %v2bool
-         %31 = OpConstantNull %v2bool
-         %34 = OpTypeFunction %v4float
+         %33 = OpConstantNull %v2bool
+         %36 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_86f9bd = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_bool Function %23
-         %29 = OpVariable %_ptr_Function_v2bool Function %31
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_bool Function %25
+         %31 = OpVariable %_ptr_Function_v2bool Function %33
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
                OpStore %arg_2 %true
-         %25 = OpLoad %bool %arg_2
-         %26 = OpLoad %v2half %arg_1
-         %27 = OpLoad %v2half %arg_0
-         %32 = OpCompositeConstruct %v2bool %25 %25
-         %24 = OpSelect %v2half %32 %26 %27
-               OpStore %res %24
+         %27 = OpLoad %bool %arg_2
+         %28 = OpLoad %v2half %arg_1
+         %29 = OpLoad %v2half %arg_0
+         %34 = OpCompositeConstruct %v2bool %27 %27
+         %26 = OpSelect %v2half %34 %28 %29
+               OpStore %res %26
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %34
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %select_86f9bd
+%vertex_main_inner = OpFunction %v4float None %36
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_86f9bd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %40
+         %41 = OpLabel
+         %42 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %42
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %select_86f9bd
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %select_86f9bd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %46 = OpLabel
-         %47 = OpFunctionCall %void %select_86f9bd
+         %48 = OpLabel
+         %49 = OpFunctionCall %void %select_86f9bd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.wgsl
index bd73ed0..0dc3a0e 100644
--- a/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/86f9bd.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_86f9bd() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var arg_2 = true;
   var res : vec2<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl b/test/tint/builtins/gen/var/select/a081f1.wgsl
index 713d3c7..3d10597 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(vec<4, f16>, vec<4, f16>, vec<4, bool>) -> vec<4, f16>
 fn select_a081f1() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var arg_2 = vec4<bool>(true);
   var res: vec4<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.dxc.hlsl
index abae0c7..cd9b433 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_a081f1() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   bool4 arg_2 = (true).xxxx;
   vector<float16_t, 4> res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.glsl
index 4d8e8c3..3d77f2d 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_a081f1() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   bvec4 arg_2 = bvec4(true);
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_a081f1() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   bvec4 arg_2 = bvec4(true);
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_a081f1() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   bvec4 arg_2 = bvec4(true);
   f16vec4 res = mix(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.msl b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.msl
index 4fcb8d9..bf3fe02 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_a081f1() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   bool4 arg_2 = bool4(true);
   half4 res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.spvasm
index 35b71ba..81f19a7 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 47
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,51 +39,53 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
+         %19 = OpConstantNull %v4half
        %bool = OpTypeBool
      %v4bool = OpTypeVector %bool 4
        %true = OpConstantTrue %bool
-         %22 = OpConstantComposite %v4bool %true %true %true %true
+         %24 = OpConstantComposite %v4bool %true %true %true %true
 %_ptr_Function_v4bool = OpTypePointer Function %v4bool
-         %25 = OpConstantNull %v4bool
-         %31 = OpTypeFunction %v4float
+         %27 = OpConstantNull %v4bool
+         %33 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_a081f1 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v4bool Function %25
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %22
-         %27 = OpLoad %v4bool %arg_2
-         %28 = OpLoad %v4half %arg_1
-         %29 = OpLoad %v4half %arg_0
-         %26 = OpSelect %v4half %27 %28 %29
-               OpStore %res %26
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v4bool Function %27
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %24
+         %29 = OpLoad %v4bool %arg_2
+         %30 = OpLoad %v4half %arg_1
+         %31 = OpLoad %v4half %arg_0
+         %28 = OpSelect %v4half %29 %30 %31
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %select_a081f1
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %select_a081f1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %select_a081f1
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %select_a081f1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %select_a081f1
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %select_a081f1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.wgsl
index 2e86702..73b30df 100644
--- a/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/a081f1.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_a081f1() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var arg_2 = vec4<bool>(true);
   var res : vec4<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl b/test/tint/builtins/gen/var/select/ed7c13.wgsl
index 43274f7..eb3330a 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl
@@ -25,8 +25,8 @@
 
 // fn select(vec<2, f16>, vec<2, f16>, vec<2, bool>) -> vec<2, f16>
 fn select_ed7c13() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var arg_2 = vec2<bool>(true);
   var res: vec2<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.dxc.hlsl
index 636eebe..3068de6 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_ed7c13() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   bool2 arg_2 = (true).xx;
   vector<float16_t, 2> res = (arg_2 ? arg_1 : arg_0);
 }
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.glsl
index 5dbf4af..f4541b5 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_ed7c13() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   bvec2 arg_2 = bvec2(true);
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
@@ -26,8 +26,8 @@
 precision mediump float;
 
 void select_ed7c13() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   bvec2 arg_2 = bvec2(true);
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
@@ -44,8 +44,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void select_ed7c13() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   bvec2 arg_2 = bvec2(true);
   f16vec2 res = mix(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.msl b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.msl
index 415a065..b48bdd8 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void select_ed7c13() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   bool2 arg_2 = bool2(true);
   half2 res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.spvasm
index bc159cf..b69e849 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 45
+; Bound: 47
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -39,51 +39,53 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
+         %19 = OpConstantNull %v2half
        %bool = OpTypeBool
      %v2bool = OpTypeVector %bool 2
        %true = OpConstantTrue %bool
-         %22 = OpConstantComposite %v2bool %true %true
+         %24 = OpConstantComposite %v2bool %true %true
 %_ptr_Function_v2bool = OpTypePointer Function %v2bool
-         %25 = OpConstantNull %v2bool
-         %31 = OpTypeFunction %v4float
+         %27 = OpConstantNull %v2bool
+         %33 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %select_ed7c13 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v2bool Function %25
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %22
-         %27 = OpLoad %v2bool %arg_2
-         %28 = OpLoad %v2half %arg_1
-         %29 = OpLoad %v2half %arg_0
-         %26 = OpSelect %v2half %27 %28 %29
-               OpStore %res %26
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v2bool Function %27
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %24
+         %29 = OpLoad %v2bool %arg_2
+         %30 = OpLoad %v2half %arg_1
+         %31 = OpLoad %v2half %arg_0
+         %28 = OpSelect %v2half %29 %30 %31
+               OpStore %res %28
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %select_ed7c13
+%vertex_main_inner = OpFunction %v4float None %33
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %select_ed7c13
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %37
+         %38 = OpLabel
+         %39 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %39
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %select_ed7c13
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %select_ed7c13
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %43 = OpLabel
-         %44 = OpFunctionCall %void %select_ed7c13
+         %45 = OpLabel
+         %46 = OpFunctionCall %void %select_ed7c13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.wgsl
index 67b7d82..06d7ad3 100644
--- a/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/ed7c13.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn select_ed7c13() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var arg_2 = vec2<bool>(true);
   var res : vec2<f16> = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl b/test/tint/builtins/gen/var/sign/160933.wgsl
index 3bd21d2..c382af0 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(vec<4, f16>) -> vec<4, f16>
 fn sign_160933() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.dxc.hlsl
index 5800ea0..a7f7d6a 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_160933() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.glsl b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.glsl
index 34a1538..e31e264 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_160933() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sign(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sign_160933() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sign(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_160933() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.msl b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.msl
index 6e7de9c..a8ae5d2 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_160933() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.spvasm
index b1d1b7e..5700e0d 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_160933 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 FSign %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 FSign %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sign_160933
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sign_160933
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sign_160933
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sign_160933
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sign_160933
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sign_160933
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.wgsl
index 21ab9a5..625ce07 100644
--- a/test/tint/builtins/gen/var/sign/160933.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/160933.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_160933() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl b/test/tint/builtins/gen/var/sign/5d283a.wgsl
index 0855f79..b8b7487 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(vec<3, f16>) -> vec<3, f16>
 fn sign_5d283a() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.dxc.hlsl
index 0f9a2c3..ba4ea8e 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_5d283a() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.glsl b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.glsl
index bb557c0..6f2f92b 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_5d283a() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sign(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sign_5d283a() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sign(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_5d283a() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.msl b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.msl
index 06a5e9e..70bde15 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_5d283a() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.spvasm
index a65dfc1..76df641 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_5d283a = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 FSign %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 FSign %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sign_5d283a
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sign_5d283a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sign_5d283a
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sign_5d283a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sign_5d283a
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sign_5d283a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.wgsl
index 78cd550..c4f3b37 100644
--- a/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/5d283a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_5d283a() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl b/test/tint/builtins/gen/var/sign/7c85ea.wgsl
index 55bb282..08bd054 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(f16) -> f16
 fn sign_7c85ea() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.dxc.hlsl
index 159140c..2a3c869 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_7c85ea() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.glsl b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.glsl
index 35b29e2..91cd452 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_7c85ea() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sign(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sign_7c85ea() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sign(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_7c85ea() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.msl b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.msl
index 649103c..4915d78 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_7c85ea() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.spvasm
index 81d4f68..34b6478 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_7c85ea = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 FSign %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 FSign %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %sign_7c85ea
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sign_7c85ea
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sign_7c85ea
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sign_7c85ea
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %sign_7c85ea
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sign_7c85ea
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.wgsl
index 1d5dd3b..76a4a97 100644
--- a/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/7c85ea.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_7c85ea() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl
index 9796e60..8849d7c 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl
@@ -25,7 +25,7 @@
 
 // fn sign(vec<2, f16>) -> vec<2, f16>
 fn sign_ccdb3c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.dxc.hlsl
index 6968272..8ec5c588 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sign_ccdb3c() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.glsl b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.glsl
index 7cd2e5c..380c133 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_ccdb3c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sign(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sign_ccdb3c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sign(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sign_ccdb3c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.msl b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.msl
index 479a00a..4245527 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sign_ccdb3c() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.spvasm
index 3d7d8e8..5bc4abb 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sign_ccdb3c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 FSign %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 FSign %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sign_ccdb3c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sign_ccdb3c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sign_ccdb3c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sign_ccdb3c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sign_ccdb3c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sign_ccdb3c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.wgsl
index 71231dd..38d2f95 100644
--- a/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/ccdb3c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sign_ccdb3c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl b/test/tint/builtins/gen/var/sin/2c903b.wgsl
index d639f9b..5524188 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(vec<3, f16>) -> vec<3, f16>
 fn sin_2c903b() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.dxc.hlsl
index f4f1c6c..7e377b0 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_2c903b() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.glsl b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.glsl
index 8af8af0..4e80fbf 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_2c903b() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sin_2c903b() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_2c903b() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.msl b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.msl
index 726be54..04bcb86 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_2c903b() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.spvasm
index a6340ff..696db23 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_2c903b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Sin %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Sin %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sin_2c903b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sin_2c903b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sin_2c903b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sin_2c903b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sin_2c903b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sin_2c903b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.wgsl
index 7e8f70a..381278f 100644
--- a/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sin/2c903b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_2c903b() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl b/test/tint/builtins/gen/var/sin/3cca11.wgsl
index fcc4f9f..80b7c53 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(vec<2, f16>) -> vec<2, f16>
 fn sin_3cca11() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.dxc.hlsl
index 52c96ed..d3d875a 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_3cca11() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.glsl b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.glsl
index 75cdcaf..ab019e2 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_3cca11() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sin_3cca11() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_3cca11() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.msl b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.msl
index 5dbd595..afa9a38 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_3cca11() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.spvasm
index 969ca21..b227acb 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_3cca11 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Sin %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Sin %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sin_3cca11
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sin_3cca11
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sin_3cca11
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sin_3cca11
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sin_3cca11
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sin_3cca11
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.wgsl
index 34f865d..e5f5ea8 100644
--- a/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sin/3cca11.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_3cca11() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl b/test/tint/builtins/gen/var/sin/5c0712.wgsl
index e94e831..8c273d4 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(vec<4, f16>) -> vec<4, f16>
 fn sin_5c0712() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.dxc.hlsl
index 38a4cca..2693475 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_5c0712() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.glsl b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.glsl
index 2260625..1fc85ff 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_5c0712() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sin_5c0712() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_5c0712() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.msl b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.msl
index 87f6df6..aa6f22d 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_5c0712() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.spvasm
index 07ac809..9a01bfe 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_5c0712 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Sin %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Sin %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sin_5c0712
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sin_5c0712
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sin_5c0712
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sin_5c0712
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sin_5c0712
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sin_5c0712
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.wgsl
index d737c45..065cba4 100644
--- a/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sin/5c0712.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_5c0712() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl b/test/tint/builtins/gen/var/sin/66a59f.wgsl
index d73f364..85c7466 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl
@@ -25,7 +25,7 @@
 
 // fn sin(f16) -> f16
 fn sin_66a59f() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.dxc.hlsl
index 7b1237f..9de611f 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sin_66a59f() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.glsl b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.glsl
index 20ac57e..4806e5f 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_66a59f() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sin(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sin_66a59f() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sin(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sin_66a59f() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.msl b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.msl
index 1a71884..b82b559 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sin_66a59f() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.spvasm
index f4689fb..c3a5f15 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %sin_66a59f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Sin %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Sin %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %sin_66a59f
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sin_66a59f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sin_66a59f
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sin_66a59f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %sin_66a59f
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sin_66a59f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.wgsl
index 897e30d..1a0c77e 100644
--- a/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sin/66a59f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sin_66a59f() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = sin(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl b/test/tint/builtins/gen/var/sinh/0908c1.wgsl
index 13e6f98..290d1a1 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(vec<3, f16>) -> vec<3, f16>
 fn sinh_0908c1() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.dxc.hlsl
index 80c43ed..7e501c8 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_0908c1() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.glsl b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.glsl
index 5d2c159..df65835 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_0908c1() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sinh_0908c1() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_0908c1() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.msl b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.msl
index a31c760..5a6a9db 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_0908c1() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.spvasm
index 5d347fe..aa9d933 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_0908c1 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Sinh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Sinh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sinh_0908c1
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sinh_0908c1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sinh_0908c1
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sinh_0908c1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sinh_0908c1
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sinh_0908c1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.wgsl
index e077d31..17bd34a 100644
--- a/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sinh/0908c1.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_0908c1() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl b/test/tint/builtins/gen/var/sinh/69cce2.wgsl
index 77fa301..b807c69 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(f16) -> f16
 fn sinh_69cce2() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.dxc.hlsl
index 4a09bf5..ff85a1f 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_69cce2() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.glsl b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.glsl
index 62e7689..73ce0f5 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_69cce2() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sinh_69cce2() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_69cce2() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.msl b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.msl
index 8c10854..d5d0f38 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_69cce2() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.spvasm
index b9a45ac..b953991 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_69cce2 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Sinh %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Sinh %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %sinh_69cce2
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sinh_69cce2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sinh_69cce2
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sinh_69cce2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %sinh_69cce2
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sinh_69cce2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.wgsl
index bb651b8..d8ef948 100644
--- a/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sinh/69cce2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_69cce2() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl b/test/tint/builtins/gen/var/sinh/924f19.wgsl
index 5afb8cf..fc53fc9 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(vec<2, f16>) -> vec<2, f16>
 fn sinh_924f19() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.dxc.hlsl
index dd95c74..e948a02 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_924f19() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.glsl b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.glsl
index 46efc04..837cb8c 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_924f19() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sinh_924f19() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_924f19() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.msl b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.msl
index eb99e96..1665954 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_924f19() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.spvasm
index c1a335d..3e671c0 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_924f19 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Sinh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Sinh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sinh_924f19
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sinh_924f19
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sinh_924f19
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sinh_924f19
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sinh_924f19
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sinh_924f19
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.wgsl
index e6d1440..e03599a 100644
--- a/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sinh/924f19.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_924f19() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl
index ea5e54c..b30192a 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl
@@ -25,7 +25,7 @@
 
 // fn sinh(vec<4, f16>) -> vec<4, f16>
 fn sinh_ba7e25() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.dxc.hlsl
index d40f726..de6afbe 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sinh_ba7e25() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.glsl b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.glsl
index c1e6fe6..4f7b50f 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_ba7e25() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sinh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sinh_ba7e25() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sinh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sinh_ba7e25() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.msl b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.msl
index c211bfd..dbc7595 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sinh_ba7e25() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.spvasm
index d98c76f..8d5a2d7 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sinh_ba7e25 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Sinh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Sinh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sinh_ba7e25
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sinh_ba7e25
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sinh_ba7e25
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sinh_ba7e25
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sinh_ba7e25
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sinh_ba7e25
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.wgsl
index 4fdc050..16b2c7e 100644
--- a/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sinh/ba7e25.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sinh_ba7e25() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = sinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl
index 630ba4f..2db4d35 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl
@@ -25,9 +25,9 @@
 
 // fn smoothstep(vec<2, f16>, vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn smoothstep_12c031() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
+  var arg_2 = vec2<f16>(1.h);
   var res: vec2<f16> = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.dxc.hlsl
index 9be0898..b9615c1 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void smoothstep_12c031() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_2 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_2 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.glsl b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.glsl
index c5453ff..c71c7b5 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_12c031() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void smoothstep_12c031() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_12c031() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
-  f16vec2 arg_2 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
+  f16vec2 arg_2 = f16vec2(1.0hf);
   f16vec2 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.msl b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.msl
index d21672c..2bc622d 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void smoothstep_12c031() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
-  half2 arg_2 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
+  half2 arg_2 = half2(1.0h);
   half2 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.spvasm b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.spvasm
index 658663c..47cd760 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_12c031 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v2half %arg_0
-         %23 = OpLoad %v2half %arg_1
-         %24 = OpLoad %v2half %arg_2
-         %20 = OpExtInst %v2half %21 SmoothStep %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v2half %arg_0
+         %25 = OpLoad %v2half %arg_1
+         %26 = OpLoad %v2half %arg_2
+         %22 = OpExtInst %v2half %23 SmoothStep %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %smoothstep_12c031
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %smoothstep_12c031
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %smoothstep_12c031
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %smoothstep_12c031
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %smoothstep_12c031
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %smoothstep_12c031
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.wgsl b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.wgsl
index 771f83c..3356cb5 100644
--- a/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/12c031.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn smoothstep_12c031() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
-  var arg_2 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
+  var arg_2 = vec2<f16>(1.0h);
   var res : vec2<f16> = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl
index 55d7962..cbe6b56 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl
@@ -25,9 +25,9 @@
 
 // fn smoothstep(f16, f16, f16) -> f16
 fn smoothstep_586e12() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
+  var arg_2 = 1.h;
   var res: f16 = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.dxc.hlsl
index 3dd35eb..c4e958d 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void smoothstep_586e12() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
-  float16_t arg_2 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
+  float16_t arg_2 = float16_t(1.0h);
   float16_t res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.glsl b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.glsl
index 4aca82e..9e3c4fb 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_586e12() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void smoothstep_586e12() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_586e12() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
-  float16_t arg_2 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
+  float16_t arg_2 = 1.0hf;
   float16_t res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.msl b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.msl
index 5b62341..82d16f9 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void smoothstep_586e12() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
-  half arg_2 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
+  half arg_2 = 1.0h;
   half res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.spvasm b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.spvasm
index dc12c46..c6a2fc2 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,45 +39,46 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_586e12 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-      %arg_2 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-               OpStore %arg_2 %14
-         %21 = OpLoad %half %arg_0
-         %22 = OpLoad %half %arg_1
-         %23 = OpLoad %half %arg_2
-         %19 = OpExtInst %half %20 SmoothStep %21 %22 %23
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+      %arg_2 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+               OpStore %arg_2 %half_0x1p_0
+         %22 = OpLoad %half %arg_0
+         %23 = OpLoad %half %arg_1
+         %24 = OpLoad %half %arg_2
+         %20 = OpExtInst %half %21 SmoothStep %22 %23 %24
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %smoothstep_586e12
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %smoothstep_586e12
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %smoothstep_586e12
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %smoothstep_586e12
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %smoothstep_586e12
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %smoothstep_586e12
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.wgsl b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.wgsl
index 9967bf6..14a0ba7 100644
--- a/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/586e12.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn smoothstep_586e12() {
-  var arg_0 = f16();
-  var arg_1 = f16();
-  var arg_2 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
+  var arg_2 = 1.0h;
   var res : f16 = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl
index fbade6c..95d86ac 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl
@@ -25,9 +25,9 @@
 
 // fn smoothstep(vec<3, f16>, vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn smoothstep_6e7a74() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
+  var arg_2 = vec3<f16>(1.h);
   var res: vec3<f16> = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.dxc.hlsl
index 710439c..6ef1676 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void smoothstep_6e7a74() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_2 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_2 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.glsl b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.glsl
index f1ecbb7..324c40f 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_6e7a74() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void smoothstep_6e7a74() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_6e7a74() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
-  f16vec3 arg_2 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
+  f16vec3 arg_2 = f16vec3(1.0hf);
   f16vec3 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.msl b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.msl
index ac08ba8..07b3f83 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void smoothstep_6e7a74() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
-  half3 arg_2 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
+  half3 arg_2 = half3(1.0h);
   half3 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.spvasm b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.spvasm
index d4fa576..85d9d72 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_6e7a74 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v3half %arg_0
-         %23 = OpLoad %v3half %arg_1
-         %24 = OpLoad %v3half %arg_2
-         %20 = OpExtInst %v3half %21 SmoothStep %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v3half %arg_0
+         %25 = OpLoad %v3half %arg_1
+         %26 = OpLoad %v3half %arg_2
+         %22 = OpExtInst %v3half %23 SmoothStep %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %smoothstep_6e7a74
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %smoothstep_6e7a74
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %smoothstep_6e7a74
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %smoothstep_6e7a74
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %smoothstep_6e7a74
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %smoothstep_6e7a74
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.wgsl b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.wgsl
index 7e668eb..f8b0486 100644
--- a/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/6e7a74.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn smoothstep_6e7a74() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
-  var arg_2 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
+  var arg_2 = vec3<f16>(1.0h);
   var res : vec3<f16> = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl
index b9a0caf..8d87efe 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl
@@ -25,9 +25,9 @@
 
 // fn smoothstep(vec<4, f16>, vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn smoothstep_c43ebd() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
+  var arg_2 = vec4<f16>(1.h);
   var res: vec4<f16> = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.dxc.hlsl
index 3bd807d..1b61019 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 void smoothstep_c43ebd() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_2 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_2 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.glsl b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.glsl
index 66c3b74..88829c6 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.glsl
@@ -2,9 +2,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_c43ebd() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -26,9 +26,9 @@
 precision mediump float;
 
 void smoothstep_c43ebd() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
@@ -44,9 +44,9 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void smoothstep_c43ebd() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
-  f16vec4 arg_2 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
+  f16vec4 arg_2 = f16vec4(1.0hf);
   f16vec4 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.msl b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.msl
index 317c043..aea4c1e 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.msl
@@ -2,9 +2,9 @@
 
 using namespace metal;
 void smoothstep_c43ebd() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
-  half4 arg_2 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
+  half4 arg_2 = half4(1.0h);
   half4 res = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.spvasm b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.spvasm
index af5f1b0..74c9c93 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %23 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -40,45 +40,47 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %26 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %28 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %smoothstep_c43ebd = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_2 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-               OpStore %arg_2 %15
-         %22 = OpLoad %v4half %arg_0
-         %23 = OpLoad %v4half %arg_1
-         %24 = OpLoad %v4half %arg_2
-         %20 = OpExtInst %v4half %21 SmoothStep %22 %23 %24
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_2 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+               OpStore %arg_2 %16
+         %24 = OpLoad %v4half %arg_0
+         %25 = OpLoad %v4half %arg_1
+         %26 = OpLoad %v4half %arg_2
+         %22 = OpExtInst %v4half %23 SmoothStep %24 %25 %26
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %smoothstep_c43ebd
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %smoothstep_c43ebd
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %33 = OpLabel
+         %34 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %34
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %smoothstep_c43ebd
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %smoothstep_c43ebd
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %smoothstep_c43ebd
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %smoothstep_c43ebd
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.wgsl
index bb68100..360a779 100644
--- a/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/smoothstep/c43ebd.wgsl.expected.wgsl
@@ -1,9 +1,9 @@
 enable f16;
 
 fn smoothstep_c43ebd() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
-  var arg_2 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
+  var arg_2 = vec4<f16>(1.0h);
   var res : vec4<f16> = smoothstep(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl
index 3911393..bca3cc3 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(vec<4, f16>) -> vec<4, f16>
 fn sqrt_803d1c() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.dxc.hlsl
index 58428a6..abaebf1 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_803d1c() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.glsl b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.glsl
index fe15cf8..6525d31 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_803d1c() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sqrt_803d1c() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_803d1c() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.msl b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.msl
index f05f55f..b940b55 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_803d1c() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.spvasm
index 4424826..ead0628 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_803d1c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Sqrt %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Sqrt %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sqrt_803d1c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sqrt_803d1c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sqrt_803d1c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sqrt_803d1c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sqrt_803d1c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sqrt_803d1c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.wgsl
index 0c83594..bf5e74b 100644
--- a/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/803d1c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_803d1c() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl
index 9b4b318..6ff8f4b 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(vec<3, f16>) -> vec<3, f16>
 fn sqrt_895a0c() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.dxc.hlsl
index f22d812..bbad199 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_895a0c() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.glsl b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.glsl
index d8f2fbd..be0ef1f 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_895a0c() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sqrt_895a0c() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_895a0c() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.msl b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.msl
index 5a04cb5..2f06dda 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_895a0c() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.spvasm
index e2fbf41..658abf9 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_895a0c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Sqrt %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Sqrt %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sqrt_895a0c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sqrt_895a0c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sqrt_895a0c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sqrt_895a0c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sqrt_895a0c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sqrt_895a0c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.wgsl
index 98a857e..7fe955f 100644
--- a/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/895a0c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_895a0c() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl
index 4be2cc6..69a6b60 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(vec<2, f16>) -> vec<2, f16>
 fn sqrt_d9ab4d() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.dxc.hlsl
index 472d31d..75cbc98 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_d9ab4d() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.glsl b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.glsl
index 3cf2d1d..b36f0ab 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_d9ab4d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sqrt_d9ab4d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_d9ab4d() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.msl b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.msl
index 39f7f69..39cdb37 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_d9ab4d() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.spvasm
index d02e8cc..0707402 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_d9ab4d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Sqrt %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Sqrt %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %sqrt_d9ab4d
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %sqrt_d9ab4d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %sqrt_d9ab4d
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %sqrt_d9ab4d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %sqrt_d9ab4d
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %sqrt_d9ab4d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.wgsl
index cd6f05c..3183b73 100644
--- a/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/d9ab4d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_d9ab4d() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl
index 7a82540..ca64044 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl
@@ -25,7 +25,7 @@
 
 // fn sqrt(f16) -> f16
 fn sqrt_ec33e9() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.dxc.hlsl
index a0b3d5f..4e3ec4e 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void sqrt_ec33e9() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.glsl b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.glsl
index 5cb1a66..513a08f 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_ec33e9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sqrt(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void sqrt_ec33e9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sqrt(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void sqrt_ec33e9() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.msl b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.msl
index 8f4e72e..03e7d8b 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void sqrt_ec33e9() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.spvasm b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.spvasm
index c593ece..f4fea39 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %sqrt_ec33e9 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Sqrt %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Sqrt %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %sqrt_ec33e9
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %sqrt_ec33e9
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %sqrt_ec33e9
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %sqrt_ec33e9
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %sqrt_ec33e9
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %sqrt_ec33e9
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.wgsl
index af947c5..103d857 100644
--- a/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sqrt/ec33e9.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn sqrt_ec33e9() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = sqrt(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl b/test/tint/builtins/gen/var/step/07cb06.wgsl
index a85442c..f7b9249 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl
@@ -25,8 +25,8 @@
 
 // fn step(vec<2, f16>, vec<2, f16>) -> vec<2, f16>
 fn step_07cb06() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
+  var arg_1 = vec2<f16>(1.h);
   var res: vec2<f16> = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.dxc.hlsl
index 58b3876..8bc21a5 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void step_07cb06() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
-  vector<float16_t, 2> arg_1 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_1 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.glsl b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.glsl
index 028ea1c..a46b618 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_07cb06() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = step(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void step_07cb06() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = step(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_07cb06() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
-  f16vec2 arg_1 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_1 = f16vec2(1.0hf);
   f16vec2 res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.msl b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.msl
index e831f91..af24038 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void step_07cb06() {
-  half2 arg_0 = half2(0.0h);
-  half2 arg_1 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
+  half2 arg_1 = half2(1.0h);
   half2 res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.spvasm b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.spvasm
index 17f336a..0e05e51 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %step_07cb06 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v2half %arg_0
-         %22 = OpLoad %v2half %arg_1
-         %19 = OpExtInst %v2half %20 Step %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v2half %arg_0
+         %24 = OpLoad %v2half %arg_1
+         %21 = OpExtInst %v2half %22 Step %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %step_07cb06
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %step_07cb06
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %step_07cb06
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %step_07cb06
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %step_07cb06
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %step_07cb06
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.wgsl
index 373395d..a8b5b22 100644
--- a/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/07cb06.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn step_07cb06() {
-  var arg_0 = vec2<f16>(f16());
-  var arg_1 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
+  var arg_1 = vec2<f16>(1.0h);
   var res : vec2<f16> = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl b/test/tint/builtins/gen/var/step/630d07.wgsl
index 7b19969..bf439eb 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl
@@ -25,8 +25,8 @@
 
 // fn step(f16, f16) -> f16
 fn step_630d07() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.h;
+  var arg_1 = 1.h;
   var res: f16 = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.dxc.hlsl
index 12473df..5faf39a 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void step_630d07() {
-  float16_t arg_0 = float16_t(0.0h);
-  float16_t arg_1 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_1 = float16_t(1.0h);
   float16_t res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.glsl b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.glsl
index a937e6c..b76c139 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_630d07() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = step(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void step_630d07() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = step(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_630d07() {
-  float16_t arg_0 = 0.0hf;
-  float16_t arg_1 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
+  float16_t arg_1 = 1.0hf;
   float16_t res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.msl b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.msl
index 7367608..f7ea9c9 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void step_630d07() {
-  half arg_0 = 0.0h;
-  half arg_1 = 0.0h;
+  half arg_0 = 1.0h;
+  half arg_1 = 1.0h;
   half res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.spvasm b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.spvasm
index 4ec1055..cdbdda6 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %20 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,42 +38,43 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %23 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %step_630d07 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-      %arg_1 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-               OpStore %arg_1 %14
-         %20 = OpLoad %half %arg_0
-         %21 = OpLoad %half %arg_1
-         %18 = OpExtInst %half %19 Step %20 %21
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+      %arg_1 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+               OpStore %arg_1 %half_0x1p_0
+         %21 = OpLoad %half %arg_0
+         %22 = OpLoad %half %arg_1
+         %19 = OpExtInst %half %20 Step %21 %22
+               OpStore %res %19
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %step_630d07
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %step_630d07
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %29
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %step_630d07
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %step_630d07
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %step_630d07
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %step_630d07
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.wgsl
index fb6884c..93dbf44 100644
--- a/test/tint/builtins/gen/var/step/630d07.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/630d07.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn step_630d07() {
-  var arg_0 = f16();
-  var arg_1 = f16();
+  var arg_0 = 1.0h;
+  var arg_1 = 1.0h;
   var res : f16 = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl b/test/tint/builtins/gen/var/step/baa320.wgsl
index 48a8fe6..97682d2 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl
@@ -25,8 +25,8 @@
 
 // fn step(vec<4, f16>, vec<4, f16>) -> vec<4, f16>
 fn step_baa320() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
+  var arg_1 = vec4<f16>(1.h);
   var res: vec4<f16> = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.dxc.hlsl
index 11ad998..a6dfc2b 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void step_baa320() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
-  vector<float16_t, 4> arg_1 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_1 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.glsl b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.glsl
index 6ac70df..1279b56 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_baa320() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = step(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void step_baa320() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = step(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_baa320() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
-  f16vec4 arg_1 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_1 = f16vec4(1.0hf);
   f16vec4 res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.msl b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.msl
index e0841af..721f39b 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void step_baa320() {
-  half4 arg_0 = half4(0.0h);
-  half4 arg_1 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
+  half4 arg_1 = half4(1.0h);
   half4 res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.spvasm b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.spvasm
index 57e7451..8688f13 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %step_baa320 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v4half %arg_0
-         %22 = OpLoad %v4half %arg_1
-         %19 = OpExtInst %v4half %20 Step %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v4half %arg_0
+         %24 = OpLoad %v4half %arg_1
+         %21 = OpExtInst %v4half %22 Step %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %step_baa320
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %step_baa320
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %step_baa320
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %step_baa320
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %step_baa320
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %step_baa320
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.wgsl
index 6128002..1b4a901 100644
--- a/test/tint/builtins/gen/var/step/baa320.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/baa320.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn step_baa320() {
-  var arg_0 = vec4<f16>(f16());
-  var arg_1 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
+  var arg_1 = vec4<f16>(1.0h);
   var res : vec4<f16> = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl b/test/tint/builtins/gen/var/step/cc6b61.wgsl
index 7b954e0..e53c65f 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl
@@ -25,8 +25,8 @@
 
 // fn step(vec<3, f16>, vec<3, f16>) -> vec<3, f16>
 fn step_cc6b61() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
+  var arg_1 = vec3<f16>(1.h);
   var res: vec3<f16> = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.dxc.hlsl
index 47f0c73..964e48e 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void step_cc6b61() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
-  vector<float16_t, 3> arg_1 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_1 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.glsl b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.glsl
index 6b1be2e..3484a43 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.glsl
@@ -2,8 +2,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_cc6b61() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = step(arg_0, arg_1);
 }
 
@@ -25,8 +25,8 @@
 precision mediump float;
 
 void step_cc6b61() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = step(arg_0, arg_1);
 }
 
@@ -42,8 +42,8 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void step_cc6b61() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
-  f16vec3 arg_1 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_1 = f16vec3(1.0hf);
   f16vec3 res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.msl b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.msl
index 40defbb..85fcf3b 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.msl
@@ -2,8 +2,8 @@
 
 using namespace metal;
 void step_cc6b61() {
-  half3 arg_0 = half3(0.0h);
-  half3 arg_1 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
+  half3 arg_1 = half3(1.0h);
   half3 res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.spvasm b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.spvasm
index efbdfdc..c650aac 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 38
+; Bound: 40
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %20 = OpExtInstImport "GLSL.std.450"
+         %22 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -39,42 +39,44 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %24 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %26 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %step_cc6b61 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-      %arg_1 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-               OpStore %arg_1 %15
-         %21 = OpLoad %v3half %arg_0
-         %22 = OpLoad %v3half %arg_1
-         %19 = OpExtInst %v3half %20 Step %21 %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+      %arg_1 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+               OpStore %arg_1 %16
+         %23 = OpLoad %v3half %arg_0
+         %24 = OpLoad %v3half %arg_1
+         %21 = OpExtInst %v3half %22 Step %23 %24
+               OpStore %res %21
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %step_cc6b61
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %step_cc6b61
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %31 = OpLabel
+         %32 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %32
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %step_cc6b61
+         %35 = OpLabel
+         %36 = OpFunctionCall %void %step_cc6b61
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %step_cc6b61
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %step_cc6b61
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.wgsl
index 68bf827..2609b26 100644
--- a/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/cc6b61.wgsl.expected.wgsl
@@ -1,8 +1,8 @@
 enable f16;
 
 fn step_cc6b61() {
-  var arg_0 = vec3<f16>(f16());
-  var arg_1 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
+  var arg_1 = vec3<f16>(1.0h);
   var res : vec3<f16> = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl b/test/tint/builtins/gen/var/tan/539e54.wgsl
index 1b4dec5..d8a753f 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(vec<4, f16>) -> vec<4, f16>
 fn tan_539e54() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.dxc.hlsl
index 5756588..fd43be1 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_539e54() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.glsl b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.glsl
index 7b8a22d..af83ad1 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_539e54() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tan_539e54() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_539e54() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.msl b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.msl
index 6c347d9..cb30e6e 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_539e54() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.spvasm
index 3808f8e..c61601d 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_539e54 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Tan %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Tan %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %tan_539e54
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %tan_539e54
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tan_539e54
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %tan_539e54
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %tan_539e54
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %tan_539e54
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.wgsl
index ceb00cf..8112cdd 100644
--- a/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tan/539e54.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_539e54() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl
index 812610e..0bb6701 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(vec<2, f16>) -> vec<2, f16>
 fn tan_9f7c9c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.dxc.hlsl
index 2dc0ec5..90ecf8e 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_9f7c9c() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.glsl b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.glsl
index fa9d31e..f32bf3c 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_9f7c9c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tan_9f7c9c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_9f7c9c() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.msl b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.msl
index 5e66467..94b6209 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_9f7c9c() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.spvasm
index f4068ee..57105f9 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_9f7c9c = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Tan %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Tan %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %tan_9f7c9c
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %tan_9f7c9c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tan_9f7c9c
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %tan_9f7c9c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %tan_9f7c9c
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %tan_9f7c9c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.wgsl
index 87305cc..be4538b 100644
--- a/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tan/9f7c9c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_9f7c9c() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl b/test/tint/builtins/gen/var/tan/d4d491.wgsl
index 3d3c9fa..4757ac7 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(f16) -> f16
 fn tan_d4d491() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.dxc.hlsl
index fb9b0ef..94b1682 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_d4d491() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.glsl b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.glsl
index c826b6b..7278b05 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_d4d491() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tan_d4d491() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_d4d491() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.msl b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.msl
index 792203e..93678f9 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_d4d491() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.spvasm
index e05388b..d1ce731 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_d4d491 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Tan %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Tan %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %tan_d4d491
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tan_d4d491
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %tan_d4d491
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tan_d4d491
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %tan_d4d491
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tan_d4d491
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.wgsl
index 34abd8d..d5af5d2 100644
--- a/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tan/d4d491.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_d4d491() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl b/test/tint/builtins/gen/var/tan/db0456.wgsl
index 0277fd9..8fc579f 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl
@@ -25,7 +25,7 @@
 
 // fn tan(vec<3, f16>) -> vec<3, f16>
 fn tan_db0456() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.dxc.hlsl
index b14a91a..ad3a043 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tan_db0456() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.glsl b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.glsl
index 0698658..afc40d9 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_db0456() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tan(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tan_db0456() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tan(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tan_db0456() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.msl b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.msl
index 35e012d..f7948b3 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tan_db0456() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.spvasm
index 66a7ba7..ce933ec 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
  %tan_db0456 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Tan %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Tan %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %tan_db0456
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %tan_db0456
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tan_db0456
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %tan_db0456
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %tan_db0456
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %tan_db0456
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.wgsl
index fb3a092..30e819d 100644
--- a/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tan/db0456.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tan_db0456() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = tan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl
index 4c328b0..c8175f8 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(vec<3, f16>) -> vec<3, f16>
 fn tanh_06a4fe() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.dxc.hlsl
index 346965f..b4221ea 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_06a4fe() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.glsl b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.glsl
index 6d9857aa..0a8ceb5 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_06a4fe() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tanh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tanh_06a4fe() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tanh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_06a4fe() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.msl b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.msl
index 3f2db87..7bae70a 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_06a4fe() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.spvasm
index 0a02492..aec3954 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_06a4fe = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Tanh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Tanh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %tanh_06a4fe
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %tanh_06a4fe
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tanh_06a4fe
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %tanh_06a4fe
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %tanh_06a4fe
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %tanh_06a4fe
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.wgsl
index 8f73c44..681b24d 100644
--- a/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tanh/06a4fe.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_06a4fe() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl b/test/tint/builtins/gen/var/tanh/5b19af.wgsl
index 1b1cc79..81ae6f2 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(f16) -> f16
 fn tanh_5b19af() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.dxc.hlsl
index 23e33a7..0c02a94 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_5b19af() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.glsl b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.glsl
index 27503fc..7dc44cd 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_5b19af() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tanh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tanh_5b19af() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tanh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_5b19af() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.msl b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.msl
index 143fb98..d0920ac 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_5b19af() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.spvasm
index 9ea5007..877e896 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_5b19af = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Tanh %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Tanh %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %tanh_5b19af
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %tanh_5b19af
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %tanh_5b19af
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %tanh_5b19af
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %tanh_5b19af
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %tanh_5b19af
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.wgsl
index b1f8363..d5f3357 100644
--- a/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tanh/5b19af.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_5b19af() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl b/test/tint/builtins/gen/var/tanh/6d105a.wgsl
index 08d3e6b..b60f515 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(vec<2, f16>) -> vec<2, f16>
 fn tanh_6d105a() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.dxc.hlsl
index cb526b4..803f340 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_6d105a() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.glsl b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.glsl
index ab61ec7..e0ae1ca 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_6d105a() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tanh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tanh_6d105a() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tanh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_6d105a() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.msl b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.msl
index 1affd27..0bd7275 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_6d105a() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.spvasm
index 8fa93ec..f2528b2 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_6d105a = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Tanh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Tanh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %tanh_6d105a
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %tanh_6d105a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tanh_6d105a
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %tanh_6d105a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %tanh_6d105a
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %tanh_6d105a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.wgsl
index b638ef8..7d07976 100644
--- a/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tanh/6d105a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_6d105a() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl
index 8091075..a5ea176 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl
@@ -25,7 +25,7 @@
 
 // fn tanh(vec<4, f16>) -> vec<4, f16>
 fn tanh_e8efb3() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.dxc.hlsl
index 26cb7ee..918a032 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void tanh_e8efb3() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.glsl b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.glsl
index 1d866b6..1d317cc 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_e8efb3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tanh(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void tanh_e8efb3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tanh(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void tanh_e8efb3() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.msl b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.msl
index 0b5e6f4..19df615 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void tanh_e8efb3() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.spvasm
index 8e07916..4c6cb47 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %tanh_e8efb3 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Tanh %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Tanh %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %tanh_e8efb3
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %tanh_e8efb3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %tanh_e8efb3
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %tanh_e8efb3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %tanh_e8efb3
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %tanh_e8efb3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.wgsl
index bdb2905..194fd5c 100644
--- a/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/tanh/e8efb3.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn tanh_e8efb3() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = tanh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl b/test/tint/builtins/gen/var/transpose/06794e.wgsl
index e17468f..534407f 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<3, 3, f16>) -> mat<3, 3, f16>
 fn transpose_06794e() {
-  var arg_0 = mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat3x3<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.dxc.hlsl
index cdd16a4..c87027e 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_06794e() {
-  matrix<float16_t, 3, 3> arg_0 = matrix<float16_t, 3, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  matrix<float16_t, 3, 3> arg_0 = matrix<float16_t, 3, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
   matrix<float16_t, 3, 3> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.glsl
index 558f547..550afe1 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_06794e() {
-  f16mat3 arg_0 = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat3 arg_0 = f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_06794e() {
-  f16mat3 arg_0 = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat3 arg_0 = f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_06794e() {
-  f16mat3 arg_0 = f16mat3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat3 arg_0 = f16mat3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.msl
index bef8041..35ebcd4 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_06794e() {
-  half3x3 arg_0 = half3x3(half3(0.0h), half3(0.0h), half3(0.0h));
+  half3x3 arg_0 = half3x3(half3(1.0h), half3(1.0h), half3(1.0h));
   half3x3 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.spvasm
index 7817296..f93f895 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,39 +38,42 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
  %mat3v3half = OpTypeMatrix %v3half 3
-         %16 = OpConstantNull %mat3v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat3v3half %17 %17 %17
 %_ptr_Function_mat3v3half = OpTypePointer Function %mat3v3half
-         %22 = OpTypeFunction %v4float
+         %21 = OpConstantNull %mat3v3half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_06794e = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat3v3half Function %16
-        %res = OpVariable %_ptr_Function_mat3v3half Function %16
-               OpStore %arg_0 %16
-         %20 = OpLoad %mat3v3half %arg_0
-         %19 = OpTranspose %mat3v3half %20
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat3v3half Function %21
+        %res = OpVariable %_ptr_Function_mat3v3half Function %21
+               OpStore %arg_0 %18
+         %23 = OpLoad %mat3v3half %arg_0
+         %22 = OpTranspose %mat3v3half %23
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %transpose_06794e
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_06794e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %transpose_06794e
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_06794e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %transpose_06794e
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_06794e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.wgsl
index 500244d..e5b99ca 100644
--- a/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/06794e.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_06794e() {
-  var arg_0 = mat3x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat3x3<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl b/test/tint/builtins/gen/var/transpose/5edd96.wgsl
index 8bf22e8..1a6abd5 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<4, 2, f16>) -> mat<2, 4, f16>
 fn transpose_5edd96() {
-  var arg_0 = mat4x2<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x2<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat2x4<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.dxc.hlsl
index 5bfa600..e4bc919 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_5edd96() {
-  matrix<float16_t, 4, 2> arg_0 = matrix<float16_t, 4, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  matrix<float16_t, 4, 2> arg_0 = matrix<float16_t, 4, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
   matrix<float16_t, 2, 4> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.glsl
index 68629f5..e05bcef 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5edd96() {
-  f16mat4x2 arg_0 = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat4x2 arg_0 = f16mat4x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2x4 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_5edd96() {
-  f16mat4x2 arg_0 = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat4x2 arg_0 = f16mat4x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2x4 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5edd96() {
-  f16mat4x2 arg_0 = f16mat4x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat4x2 arg_0 = f16mat4x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2x4 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.msl
index c656586..b6a8ba5 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_5edd96() {
-  half4x2 arg_0 = half4x2(half2(0.0h), half2(0.0h), half2(0.0h), half2(0.0h));
+  half4x2 arg_0 = half4x2(half2(1.0h), half2(1.0h), half2(1.0h), half2(1.0h));
   half2x4 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.spvasm
index a433092..b059f58 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,43 +38,46 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
  %mat4v2half = OpTypeMatrix %v2half 4
-         %16 = OpConstantNull %mat4v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat4v2half %17 %17 %17 %17
 %_ptr_Function_mat4v2half = OpTypePointer Function %mat4v2half
+         %21 = OpConstantNull %mat4v2half
      %v4half = OpTypeVector %half 4
  %mat2v4half = OpTypeMatrix %v4half 2
 %_ptr_Function_mat2v4half = OpTypePointer Function %mat2v4half
-         %25 = OpConstantNull %mat2v4half
-         %26 = OpTypeFunction %v4float
+         %28 = OpConstantNull %mat2v4half
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_5edd96 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat4v2half Function %16
-        %res = OpVariable %_ptr_Function_mat2v4half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %mat4v2half %arg_0
-         %19 = OpTranspose %mat2v4half %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat4v2half Function %21
+        %res = OpVariable %_ptr_Function_mat2v4half Function %28
+               OpStore %arg_0 %18
+         %25 = OpLoad %mat4v2half %arg_0
+         %22 = OpTranspose %mat2v4half %25
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %transpose_5edd96
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %transpose_5edd96
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_5edd96
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %transpose_5edd96
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %transpose_5edd96
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %transpose_5edd96
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.wgsl
index 9c293d9..6301bbb 100644
--- a/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/5edd96.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_5edd96() {
-  var arg_0 = mat4x2<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x2<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat2x4<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl
index 7dfb05c..537fb1b 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<4, 3, f16>) -> mat<3, 4, f16>
 fn transpose_5f36bf() {
-  var arg_0 = mat4x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat3x4<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.dxc.hlsl
index 6f424bd..d9848bb 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_5f36bf() {
-  matrix<float16_t, 4, 3> arg_0 = matrix<float16_t, 4, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  matrix<float16_t, 4, 3> arg_0 = matrix<float16_t, 4, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
   matrix<float16_t, 3, 4> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.glsl
index 306e862..eb65382 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5f36bf() {
-  f16mat4x3 arg_0 = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat4x3 arg_0 = f16mat4x3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3x4 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_5f36bf() {
-  f16mat4x3 arg_0 = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat4x3 arg_0 = f16mat4x3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3x4 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_5f36bf() {
-  f16mat4x3 arg_0 = f16mat4x3(f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat4x3 arg_0 = f16mat4x3(f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3x4 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.msl
index 2f8a2ac..ccf7f2b 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_5f36bf() {
-  half4x3 arg_0 = half4x3(half3(0.0h), half3(0.0h), half3(0.0h), half3(0.0h));
+  half4x3 arg_0 = half4x3(half3(1.0h), half3(1.0h), half3(1.0h), half3(1.0h));
   half3x4 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.spvasm
index 8a2641b..11a1ed3 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,43 +38,46 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
  %mat4v3half = OpTypeMatrix %v3half 4
-         %16 = OpConstantNull %mat4v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat4v3half %17 %17 %17 %17
 %_ptr_Function_mat4v3half = OpTypePointer Function %mat4v3half
+         %21 = OpConstantNull %mat4v3half
      %v4half = OpTypeVector %half 4
  %mat3v4half = OpTypeMatrix %v4half 3
 %_ptr_Function_mat3v4half = OpTypePointer Function %mat3v4half
-         %25 = OpConstantNull %mat3v4half
-         %26 = OpTypeFunction %v4float
+         %28 = OpConstantNull %mat3v4half
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_5f36bf = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat4v3half Function %16
-        %res = OpVariable %_ptr_Function_mat3v4half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %mat4v3half %arg_0
-         %19 = OpTranspose %mat3v4half %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat4v3half Function %21
+        %res = OpVariable %_ptr_Function_mat3v4half Function %28
+               OpStore %arg_0 %18
+         %25 = OpLoad %mat4v3half %arg_0
+         %22 = OpTranspose %mat3v4half %25
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %transpose_5f36bf
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %transpose_5f36bf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_5f36bf
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %transpose_5f36bf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %transpose_5f36bf
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %transpose_5f36bf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.wgsl
index 4fe2031..7633281 100644
--- a/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/5f36bf.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_5f36bf() {
-  var arg_0 = mat4x3<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat3x4<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl
index 7102102..6a9b894 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<2, 2, f16>) -> mat<2, 2, f16>
 fn transpose_7be8b2() {
-  var arg_0 = mat2x2<f16>(f16(), f16(), f16(), f16());
+  var arg_0 = mat2x2<f16>(1.h, 1.h, 1.h, 1.h);
   var res: mat2x2<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.dxc.hlsl
index ee1edd6..5f701d3 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_7be8b2() {
-  matrix<float16_t, 2, 2> arg_0 = matrix<float16_t, 2, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  matrix<float16_t, 2, 2> arg_0 = matrix<float16_t, 2, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
   matrix<float16_t, 2, 2> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.glsl
index f9c1764..ce42da7 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_7be8b2() {
-  f16mat2 arg_0 = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat2 arg_0 = f16mat2(f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_7be8b2() {
-  f16mat2 arg_0 = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat2 arg_0 = f16mat2(f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_7be8b2() {
-  f16mat2 arg_0 = f16mat2(f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat2 arg_0 = f16mat2(f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.msl
index f53a158..a352ada 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_7be8b2() {
-  half2x2 arg_0 = half2x2(half2(0.0h), half2(0.0h));
+  half2x2 arg_0 = half2x2(half2(1.0h), half2(1.0h));
   half2x2 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.spvasm
index f676cac..ce66a9b 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,39 +38,42 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
  %mat2v2half = OpTypeMatrix %v2half 2
-         %16 = OpConstantNull %mat2v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat2v2half %17 %17
 %_ptr_Function_mat2v2half = OpTypePointer Function %mat2v2half
-         %22 = OpTypeFunction %v4float
+         %21 = OpConstantNull %mat2v2half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_7be8b2 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat2v2half Function %16
-        %res = OpVariable %_ptr_Function_mat2v2half Function %16
-               OpStore %arg_0 %16
-         %20 = OpLoad %mat2v2half %arg_0
-         %19 = OpTranspose %mat2v2half %20
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat2v2half Function %21
+        %res = OpVariable %_ptr_Function_mat2v2half Function %21
+               OpStore %arg_0 %18
+         %23 = OpLoad %mat2v2half %arg_0
+         %22 = OpTranspose %mat2v2half %23
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %transpose_7be8b2
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_7be8b2
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %transpose_7be8b2
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_7be8b2
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %transpose_7be8b2
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_7be8b2
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.wgsl
index 277d2e5..0899191 100644
--- a/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/7be8b2.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_7be8b2() {
-  var arg_0 = mat2x2<f16>(f16(), f16(), f16(), f16());
+  var arg_0 = mat2x2<f16>(1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat2x2<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl b/test/tint/builtins/gen/var/transpose/844869.wgsl
index 920f444..df41e76 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<4, 4, f16>) -> mat<4, 4, f16>
 fn transpose_844869() {
-  var arg_0 = mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat4x4<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.dxc.hlsl
index 17bcee8..67ade18 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_844869() {
-  matrix<float16_t, 4, 4> arg_0 = matrix<float16_t, 4, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  matrix<float16_t, 4, 4> arg_0 = matrix<float16_t, 4, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
   matrix<float16_t, 4, 4> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.glsl
index 9726985..cb77521 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_844869() {
-  f16mat4 arg_0 = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat4 arg_0 = f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_844869() {
-  f16mat4 arg_0 = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat4 arg_0 = f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_844869() {
-  f16mat4 arg_0 = f16mat4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat4 arg_0 = f16mat4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.msl
index 564ba7d..7b17966 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_844869() {
-  half4x4 arg_0 = half4x4(half4(0.0h), half4(0.0h), half4(0.0h), half4(0.0h));
+  half4x4 arg_0 = half4x4(half4(1.0h), half4(1.0h), half4(1.0h), half4(1.0h));
   half4x4 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.spvasm
index 204bd6c..6e24aa1 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,39 +38,42 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
  %mat4v4half = OpTypeMatrix %v4half 4
-         %16 = OpConstantNull %mat4v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat4v4half %17 %17 %17 %17
 %_ptr_Function_mat4v4half = OpTypePointer Function %mat4v4half
-         %22 = OpTypeFunction %v4float
+         %21 = OpConstantNull %mat4v4half
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_844869 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat4v4half Function %16
-        %res = OpVariable %_ptr_Function_mat4v4half Function %16
-               OpStore %arg_0 %16
-         %20 = OpLoad %mat4v4half %arg_0
-         %19 = OpTranspose %mat4v4half %20
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat4v4half Function %21
+        %res = OpVariable %_ptr_Function_mat4v4half Function %21
+               OpStore %arg_0 %18
+         %23 = OpLoad %mat4v4half %arg_0
+         %22 = OpTranspose %mat4v4half %23
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %transpose_844869
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %transpose_844869
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %31
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %transpose_844869
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %transpose_844869
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %transpose_844869
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %transpose_844869
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.wgsl
index a96ffd3..43882f0 100644
--- a/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/844869.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_844869() {
-  var arg_0 = mat4x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat4x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat4x4<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl
index 5916913..2c8b1e3 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<3, 4, f16>) -> mat<4, 3, f16>
 fn transpose_8c06ce() {
-  var arg_0 = mat3x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat4x3<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.dxc.hlsl
index 8af9aa1..f83c870 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_8c06ce() {
-  matrix<float16_t, 3, 4> arg_0 = matrix<float16_t, 3, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  matrix<float16_t, 3, 4> arg_0 = matrix<float16_t, 3, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
   matrix<float16_t, 4, 3> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.glsl
index eb6e17c..375e8a83 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_8c06ce() {
-  f16mat3x4 arg_0 = f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat3x4 arg_0 = f16mat3x4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4x3 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_8c06ce() {
-  f16mat3x4 arg_0 = f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat3x4 arg_0 = f16mat3x4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4x3 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_8c06ce() {
-  f16mat3x4 arg_0 = f16mat3x4(f16vec4(0.0hf), f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat3x4 arg_0 = f16mat3x4(f16vec4(1.0hf), f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4x3 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.msl
index ae175b0..7484fc0 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_8c06ce() {
-  half3x4 arg_0 = half3x4(half4(0.0h), half4(0.0h), half4(0.0h));
+  half3x4 arg_0 = half3x4(half4(1.0h), half4(1.0h), half4(1.0h));
   half4x3 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.spvasm
index c01b8c6..5cc52f3 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,43 +38,46 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
  %mat3v4half = OpTypeMatrix %v4half 3
-         %16 = OpConstantNull %mat3v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat3v4half %17 %17 %17
 %_ptr_Function_mat3v4half = OpTypePointer Function %mat3v4half
+         %21 = OpConstantNull %mat3v4half
      %v3half = OpTypeVector %half 3
  %mat4v3half = OpTypeMatrix %v3half 4
 %_ptr_Function_mat4v3half = OpTypePointer Function %mat4v3half
-         %25 = OpConstantNull %mat4v3half
-         %26 = OpTypeFunction %v4float
+         %28 = OpConstantNull %mat4v3half
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_8c06ce = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat3v4half Function %16
-        %res = OpVariable %_ptr_Function_mat4v3half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %mat3v4half %arg_0
-         %19 = OpTranspose %mat4v3half %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat3v4half Function %21
+        %res = OpVariable %_ptr_Function_mat4v3half Function %28
+               OpStore %arg_0 %18
+         %25 = OpLoad %mat3v4half %arg_0
+         %22 = OpTranspose %mat4v3half %25
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %transpose_8c06ce
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %transpose_8c06ce
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_8c06ce
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %transpose_8c06ce
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %transpose_8c06ce
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %transpose_8c06ce
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.wgsl
index ee401e7..1aa96e4 100644
--- a/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/8c06ce.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_8c06ce() {
-  var arg_0 = mat3x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat4x3<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl
index fd8dc13..ca4d50c 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<3, 2, f16>) -> mat<2, 3, f16>
 fn transpose_b9ad1f() {
-  var arg_0 = mat3x2<f16>(f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x2<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat2x3<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.dxc.hlsl
index dae12f3..aa75d02 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_b9ad1f() {
-  matrix<float16_t, 3, 2> arg_0 = matrix<float16_t, 3, 2>((float16_t(0.0h)).xx, (float16_t(0.0h)).xx, (float16_t(0.0h)).xx);
+  matrix<float16_t, 3, 2> arg_0 = matrix<float16_t, 3, 2>((float16_t(1.0h)).xx, (float16_t(1.0h)).xx, (float16_t(1.0h)).xx);
   matrix<float16_t, 2, 3> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.glsl
index fbe4830..b6e288b 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_b9ad1f() {
-  f16mat3x2 arg_0 = f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat3x2 arg_0 = f16mat3x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2x3 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_b9ad1f() {
-  f16mat3x2 arg_0 = f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat3x2 arg_0 = f16mat3x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2x3 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_b9ad1f() {
-  f16mat3x2 arg_0 = f16mat3x2(f16vec2(0.0hf), f16vec2(0.0hf), f16vec2(0.0hf));
+  f16mat3x2 arg_0 = f16mat3x2(f16vec2(1.0hf), f16vec2(1.0hf), f16vec2(1.0hf));
   f16mat2x3 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.msl
index df905fe..13d5499 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_b9ad1f() {
-  half3x2 arg_0 = half3x2(half2(0.0h), half2(0.0h), half2(0.0h));
+  half3x2 arg_0 = half3x2(half2(1.0h), half2(1.0h), half2(1.0h));
   half2x3 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.spvasm
index 0aefff3..5af2d0d 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,43 +38,46 @@
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
  %mat3v2half = OpTypeMatrix %v2half 3
-         %16 = OpConstantNull %mat3v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat3v2half %17 %17 %17
 %_ptr_Function_mat3v2half = OpTypePointer Function %mat3v2half
+         %21 = OpConstantNull %mat3v2half
      %v3half = OpTypeVector %half 3
  %mat2v3half = OpTypeMatrix %v3half 2
 %_ptr_Function_mat2v3half = OpTypePointer Function %mat2v3half
-         %25 = OpConstantNull %mat2v3half
-         %26 = OpTypeFunction %v4float
+         %28 = OpConstantNull %mat2v3half
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_b9ad1f = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat3v2half Function %16
-        %res = OpVariable %_ptr_Function_mat2v3half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %mat3v2half %arg_0
-         %19 = OpTranspose %mat2v3half %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat3v2half Function %21
+        %res = OpVariable %_ptr_Function_mat2v3half Function %28
+               OpStore %arg_0 %18
+         %25 = OpLoad %mat3v2half %arg_0
+         %22 = OpTranspose %mat2v3half %25
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %transpose_b9ad1f
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %transpose_b9ad1f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_b9ad1f
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %transpose_b9ad1f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %transpose_b9ad1f
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %transpose_b9ad1f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.wgsl
index c96a7dc..b03542a 100644
--- a/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/b9ad1f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_b9ad1f() {
-  var arg_0 = mat3x2<f16>(f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat3x2<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat2x3<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl b/test/tint/builtins/gen/var/transpose/d6faec.wgsl
index d5b7ec3..69281e0 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<2, 3, f16>) -> mat<3, 2, f16>
 fn transpose_d6faec() {
-  var arg_0 = mat2x3<f16>(f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat2x3<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat3x2<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.dxc.hlsl
index 5f07e18..61e3055 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_d6faec() {
-  matrix<float16_t, 2, 3> arg_0 = matrix<float16_t, 2, 3>((float16_t(0.0h)).xxx, (float16_t(0.0h)).xxx);
+  matrix<float16_t, 2, 3> arg_0 = matrix<float16_t, 2, 3>((float16_t(1.0h)).xxx, (float16_t(1.0h)).xxx);
   matrix<float16_t, 3, 2> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.glsl
index b4d1afe..83dbe18 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_d6faec() {
-  f16mat2x3 arg_0 = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat2x3 arg_0 = f16mat2x3(f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3x2 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_d6faec() {
-  f16mat2x3 arg_0 = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat2x3 arg_0 = f16mat2x3(f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3x2 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_d6faec() {
-  f16mat2x3 arg_0 = f16mat2x3(f16vec3(0.0hf), f16vec3(0.0hf));
+  f16mat2x3 arg_0 = f16mat2x3(f16vec3(1.0hf), f16vec3(1.0hf));
   f16mat3x2 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.msl
index 1f7eac0..0e8d5a0 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_d6faec() {
-  half2x3 arg_0 = half2x3(half3(0.0h), half3(0.0h));
+  half2x3 arg_0 = half2x3(half3(1.0h), half3(1.0h));
   half3x2 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.spvasm
index 513643d..3b781a5 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,43 +38,46 @@
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
  %mat2v3half = OpTypeMatrix %v3half 2
-         %16 = OpConstantNull %mat2v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat2v3half %17 %17
 %_ptr_Function_mat2v3half = OpTypePointer Function %mat2v3half
+         %21 = OpConstantNull %mat2v3half
      %v2half = OpTypeVector %half 2
  %mat3v2half = OpTypeMatrix %v2half 3
 %_ptr_Function_mat3v2half = OpTypePointer Function %mat3v2half
-         %25 = OpConstantNull %mat3v2half
-         %26 = OpTypeFunction %v4float
+         %28 = OpConstantNull %mat3v2half
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_d6faec = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat2v3half Function %16
-        %res = OpVariable %_ptr_Function_mat3v2half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %mat2v3half %arg_0
-         %19 = OpTranspose %mat3v2half %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat2v3half Function %21
+        %res = OpVariable %_ptr_Function_mat3v2half Function %28
+               OpStore %arg_0 %18
+         %25 = OpLoad %mat2v3half %arg_0
+         %22 = OpTranspose %mat3v2half %25
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %transpose_d6faec
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %transpose_d6faec
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_d6faec
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %transpose_d6faec
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %transpose_d6faec
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %transpose_d6faec
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.wgsl
index 472aade..f439b66 100644
--- a/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/d6faec.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_d6faec() {
-  var arg_0 = mat2x3<f16>(f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat2x3<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat3x2<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl b/test/tint/builtins/gen/var/transpose/faeb05.wgsl
index 0e2feed..e891630 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl
@@ -25,7 +25,7 @@
 
 // fn transpose(mat<2, 4, f16>) -> mat<4, 2, f16>
 fn transpose_faeb05() {
-  var arg_0 = mat2x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat2x4<f16>(1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h, 1.h);
   var res: mat4x2<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.dxc.hlsl
index e318602..b0ada99 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void transpose_faeb05() {
-  matrix<float16_t, 2, 4> arg_0 = matrix<float16_t, 2, 4>((float16_t(0.0h)).xxxx, (float16_t(0.0h)).xxxx);
+  matrix<float16_t, 2, 4> arg_0 = matrix<float16_t, 2, 4>((float16_t(1.0h)).xxxx, (float16_t(1.0h)).xxxx);
   matrix<float16_t, 4, 2> res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.glsl b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.glsl
index 3080917..86c2ac6 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_faeb05() {
-  f16mat2x4 arg_0 = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat2x4 arg_0 = f16mat2x4(f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4x2 res = transpose(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void transpose_faeb05() {
-  f16mat2x4 arg_0 = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat2x4 arg_0 = f16mat2x4(f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4x2 res = transpose(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void transpose_faeb05() {
-  f16mat2x4 arg_0 = f16mat2x4(f16vec4(0.0hf), f16vec4(0.0hf));
+  f16mat2x4 arg_0 = f16mat2x4(f16vec4(1.0hf), f16vec4(1.0hf));
   f16mat4x2 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.msl b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.msl
index f941a64..674a561 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void transpose_faeb05() {
-  half2x4 arg_0 = half2x4(half4(0.0h), half4(0.0h));
+  half2x4 arg_0 = half2x4(half4(1.0h), half4(1.0h));
   half4x2 res = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.spvasm b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.spvasm
index f7a4c55..5b43dfb 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
@@ -38,43 +38,46 @@
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
  %mat2v4half = OpTypeMatrix %v4half 2
-         %16 = OpConstantNull %mat2v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %17 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %18 = OpConstantComposite %mat2v4half %17 %17
 %_ptr_Function_mat2v4half = OpTypePointer Function %mat2v4half
+         %21 = OpConstantNull %mat2v4half
      %v2half = OpTypeVector %half 2
  %mat4v2half = OpTypeMatrix %v2half 4
 %_ptr_Function_mat4v2half = OpTypePointer Function %mat4v2half
-         %25 = OpConstantNull %mat4v2half
-         %26 = OpTypeFunction %v4float
+         %28 = OpConstantNull %mat4v2half
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %transpose_faeb05 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_mat2v4half Function %16
-        %res = OpVariable %_ptr_Function_mat4v2half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %mat2v4half %arg_0
-         %19 = OpTranspose %mat4v2half %22
-               OpStore %res %19
+      %arg_0 = OpVariable %_ptr_Function_mat2v4half Function %21
+        %res = OpVariable %_ptr_Function_mat4v2half Function %28
+               OpStore %arg_0 %18
+         %25 = OpLoad %mat2v4half %arg_0
+         %22 = OpTranspose %mat4v2half %25
+               OpStore %res %22
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %transpose_faeb05
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %transpose_faeb05
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %35
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %transpose_faeb05
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %transpose_faeb05
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %transpose_faeb05
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %transpose_faeb05
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.wgsl b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.wgsl
index a6de2cb..10f8d0a 100644
--- a/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/transpose/faeb05.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn transpose_faeb05() {
-  var arg_0 = mat2x4<f16>(f16(), f16(), f16(), f16(), f16(), f16(), f16(), f16());
+  var arg_0 = mat2x4<f16>(1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h, 1.0h);
   var res : mat4x2<f16> = transpose(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl b/test/tint/builtins/gen/var/trunc/103ab8.wgsl
index 144541a..09e2de3 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(vec<3, f16>) -> vec<3, f16>
 fn trunc_103ab8() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.h);
   var res: vec3<f16> = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.dxc.hlsl
index 6adf48c..ddbd6d2 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_103ab8() {
-  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
   vector<float16_t, 3> res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.glsl b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.glsl
index cd4f15d..ffb099f 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_103ab8() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = trunc(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void trunc_103ab8() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = trunc(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_103ab8() {
-  f16vec3 arg_0 = f16vec3(0.0hf);
+  f16vec3 arg_0 = f16vec3(1.0hf);
   f16vec3 res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.msl b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.msl
index 3bd56b9..22056f0 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_103ab8() {
-  half3 arg_0 = half3(0.0h);
+  half3 arg_0 = half3(1.0h);
   half3 res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.spvasm b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.spvasm
index 7080335..91192b4 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-         %15 = OpConstantNull %v3half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v3half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_103ab8 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
-        %res = OpVariable %_ptr_Function_v3half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v3half %arg_0
-         %18 = OpExtInst %v3half %19 Trunc %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
+        %res = OpVariable %_ptr_Function_v3half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v3half %arg_0
+         %20 = OpExtInst %v3half %21 Trunc %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %trunc_103ab8
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %trunc_103ab8
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %trunc_103ab8
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %trunc_103ab8
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %trunc_103ab8
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %trunc_103ab8
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.wgsl
index a4cd5c8..dc42691 100644
--- a/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/trunc/103ab8.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_103ab8() {
-  var arg_0 = vec3<f16>(f16());
+  var arg_0 = vec3<f16>(1.0h);
   var res : vec3<f16> = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl b/test/tint/builtins/gen/var/trunc/a56109.wgsl
index f7ece8d..4e6b5b1 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(vec<2, f16>) -> vec<2, f16>
 fn trunc_a56109() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.h);
   var res: vec2<f16> = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.dxc.hlsl
index 39ea255..059dfcf 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_a56109() {
-  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
   vector<float16_t, 2> res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.glsl b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.glsl
index 754116e..3855c864 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_a56109() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = trunc(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void trunc_a56109() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = trunc(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_a56109() {
-  f16vec2 arg_0 = f16vec2(0.0hf);
+  f16vec2 arg_0 = f16vec2(1.0hf);
   f16vec2 res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.msl b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.msl
index 395166b..38660ec 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_a56109() {
-  half2 arg_0 = half2(0.0h);
+  half2 arg_0 = half2(1.0h);
   half2 res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.spvasm b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.spvasm
index fa693e8d..c7d0941 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-         %15 = OpConstantNull %v2half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v2half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_a56109 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
-        %res = OpVariable %_ptr_Function_v2half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v2half %arg_0
-         %18 = OpExtInst %v2half %19 Trunc %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
+        %res = OpVariable %_ptr_Function_v2half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v2half %arg_0
+         %20 = OpExtInst %v2half %21 Trunc %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %trunc_a56109
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %trunc_a56109
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %trunc_a56109
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %trunc_a56109
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %trunc_a56109
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %trunc_a56109
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.wgsl b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.wgsl
index be9c55d..71aabc5 100644
--- a/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/trunc/a56109.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_a56109() {
-  var arg_0 = vec2<f16>(f16());
+  var arg_0 = vec2<f16>(1.0h);
   var res : vec2<f16> = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl
index 3aad0e3..ee4f839 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(f16) -> f16
 fn trunc_cc2b0d() {
-  var arg_0 = f16();
+  var arg_0 = 1.h;
   var res: f16 = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.dxc.hlsl
index e998713..8f1a6af 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_cc2b0d() {
-  float16_t arg_0 = float16_t(0.0h);
+  float16_t arg_0 = float16_t(1.0h);
   float16_t res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.glsl b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.glsl
index 73a3d1e..f0e9d9c 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_cc2b0d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = trunc(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void trunc_cc2b0d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = trunc(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_cc2b0d() {
-  float16_t arg_0 = 0.0hf;
+  float16_t arg_0 = 1.0hf;
   float16_t res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.msl b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.msl
index 3b88cd7..25fd8e1 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_cc2b0d() {
-  half arg_0 = 0.0h;
+  half arg_0 = 1.0h;
   half res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.spvasm
index a227bba..1266beb 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %18 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,39 +37,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-         %14 = OpConstantNull %half
+%half_0x1p_0 = OpConstant %half 0x1p+0
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpTypeFunction %v4float
+         %17 = OpConstantNull %half
+         %22 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_cc2b0d = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %14
-        %res = OpVariable %_ptr_Function_half Function %14
-               OpStore %arg_0 %14
-         %19 = OpLoad %half %arg_0
-         %17 = OpExtInst %half %18 Trunc %19
-               OpStore %res %17
+      %arg_0 = OpVariable %_ptr_Function_half Function %17
+        %res = OpVariable %_ptr_Function_half Function %17
+               OpStore %arg_0 %half_0x1p_0
+         %20 = OpLoad %half %arg_0
+         %18 = OpExtInst %half %19 Trunc %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %21
-         %23 = OpLabel
-         %24 = OpFunctionCall %void %trunc_cc2b0d
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %trunc_cc2b0d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %27
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %trunc_cc2b0d
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %trunc_cc2b0d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %trunc_cc2b0d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %trunc_cc2b0d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.wgsl
index 5530fe3..cc68f29 100644
--- a/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/trunc/cc2b0d.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_cc2b0d() {
-  var arg_0 = f16();
+  var arg_0 = 1.0h;
   var res : f16 = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl
index a90b832..be36c02 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl
@@ -25,7 +25,7 @@
 
 // fn trunc(vec<4, f16>) -> vec<4, f16>
 fn trunc_ce7c17() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.h);
   var res: vec4<f16> = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.dxc.hlsl
index b3fc9a3..fedd729 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void trunc_ce7c17() {
-  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
   vector<float16_t, 4> res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.glsl b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.glsl
index 53c46bd..6b65996 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_ce7c17() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = trunc(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void trunc_ce7c17() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = trunc(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void trunc_ce7c17() {
-  f16vec4 arg_0 = f16vec4(0.0hf);
+  f16vec4 arg_0 = f16vec4(1.0hf);
   f16vec4 res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.msl b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.msl
index 183371d..f3f90c4 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void trunc_ce7c17() {
-  half4 arg_0 = half4(0.0h);
+  half4 arg_0 = half4(1.0h);
   half4 res = trunc(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.spvasm b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.spvasm
index 9341301..91cad17 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %21 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,39 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-         %15 = OpConstantNull %v4half
+%half_0x1p_0 = OpConstant %half 0x1p+0
+         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %22 = OpTypeFunction %v4float
+         %19 = OpConstantNull %v4half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %trunc_ce7c17 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
-        %res = OpVariable %_ptr_Function_v4half Function %15
-               OpStore %arg_0 %15
-         %20 = OpLoad %v4half %arg_0
-         %18 = OpExtInst %v4half %19 Trunc %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
+        %res = OpVariable %_ptr_Function_v4half Function %19
+               OpStore %arg_0 %16
+         %22 = OpLoad %v4half %arg_0
+         %20 = OpExtInst %v4half %21 Trunc %22
+               OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %trunc_ce7c17
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %trunc_ce7c17
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %trunc_ce7c17
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %trunc_ce7c17
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %trunc_ce7c17
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %trunc_ce7c17
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.wgsl b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.wgsl
index bc7e46a..8fa5b3b 100644
--- a/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/trunc/ce7c17.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn trunc_ce7c17() {
-  var arg_0 = vec4<f16>(f16());
+  var arg_0 = vec4<f16>(1.0h);
   var res : vec4<f16> = trunc(arg_0);
 }