test/tint: Fix e2e test generation for abstract

Abstract int and abstract float were around the wrong way.

Credit goes to amaiorano@ for finding this!

Change-Id: Ifaeeca86b0d15ead295b714e0c178fa6d0bfb68b
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/108641
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/test/tint/builtins/gen/gen.wgsl.tmpl b/test/tint/builtins/gen/gen.wgsl.tmpl
index 3c30474..f0cbd4a 100644
--- a/test/tint/builtins/gen/gen.wgsl.tmpl
+++ b/test/tint/builtins/gen/gen.wgsl.tmpl
@@ -273,8 +273,8 @@
 {{-   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 "fa"   -}}{{$value}}
-{{-   else if eq $ty.Target.Name "ia"   -}}{{$float_value}}0
+{{-   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
 {{-   else if eq $ty.Target.Name "vec"  -}}
 {{-     $el := Eval "ArgumentValue" "Type" (ElementType .Type) "Name" "" "TestValue" .TestValue }}
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl
index 9a01ee4..be8f698 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<3, fa>) -> vec<3, fa>
 fn abs_2f861b() {
-  var res = abs(vec3(1));
+  var res = abs(vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.dxc.hlsl
index 6315af3..d3dc754 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_2f861b() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.fxc.hlsl
index 6315af3..d3dc754 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_2f861b() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.glsl
index b669674..b068d2d 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_2f861b() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_2f861b() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_2f861b() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.msl
index d985285..3fef020 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_2f861b() {
-  int3 res = int3(1);
+  float3 res = float3(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.spvasm
index b10efe2..2060ef1 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %19 = OpConstantNull %v3int
-         %20 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %18 = OpConstantNull %v3float
+         %19 = OpTypeFunction %v4float
  %abs_2f861b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v3float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %abs_2f861b
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %abs_2f861b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_2f861b
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_2f861b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %abs_2f861b
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_2f861b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.wgsl
index 5d6095f..576b78c 100644
--- a/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/2f861b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_2f861b() {
-  var res = abs(vec3(1));
+  var res = abs(vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl
index 0a1d61f..31f2110 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<2, ia>) -> vec<2, ia>
 fn abs_577d6e() {
-  var res = abs(vec2(1.0));
+  var res = abs(vec2(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.dxc.hlsl
index b4f3ce7..d24e2b9 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_577d6e() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.fxc.hlsl
index b4f3ce7..d24e2b9 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_577d6e() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.glsl
index 096262c..43a48a3 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_577d6e() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_577d6e() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_577d6e() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.msl
index 4e92bd1..2d6f835 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_577d6e() {
-  float2 res = float2(1.0f);
+  int2 res = int2(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.spvasm
index 648166a..684510a 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/577d6e.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %19 = OpConstantNull %v2int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-         %19 = OpTypeFunction %v4float
  %abs_577d6e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %abs_577d6e
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_577d6e
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_577d6e
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_577d6e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_577d6e
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_577d6e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.wgsl
index 776e79a..083730e 100644
--- a/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/577d6e.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_577d6e() {
-  var res = abs(vec2(1.0));
+  var res = abs(vec2(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl
index 8410ba1..334c793 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(ia) -> ia
 fn abs_5a8af1() {
-  var res = abs(1.0);
+  var res = abs(1);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.dxc.hlsl
index d571cd6..86901c6 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.fxc.hlsl
index d571cd6..86901c6 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.glsl
index 98ca290..d454d02 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.msl
index 6ef8f36..a3468f9 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.spvasm
index 5027752..6201ee3 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,34 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %17 = OpConstantNull %int
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpTypeFunction %v4float
  %abs_5a8af1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %res %float_1
+        %res = OpVariable %_ptr_Function_int Function %17
+               OpStore %res %int_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %16
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %abs_5a8af1
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %abs_5a8af1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %21 = OpLabel
-         %22 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %22
+         %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
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %abs_5a8af1
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_5a8af1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_5a8af1
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_5a8af1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.wgsl
index 2af33ab..1a0ff09 100644
--- a/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/5a8af1.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_5a8af1() {
-  var res = abs(1.0);
+  var res = abs(1);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl
index fe0ea5d..2605964 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<2, fa>) -> vec<2, fa>
 fn abs_82ff9d() {
-  var res = abs(vec2(1));
+  var res = abs(vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.dxc.hlsl
index 60243f7..558b2e3 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_82ff9d() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.fxc.hlsl
index 60243f7..558b2e3 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_82ff9d() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.glsl
index f1cc268..7eeff32 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_82ff9d() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_82ff9d() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_82ff9d() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.msl
index 43cd910..d82882e 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_82ff9d() {
-  int2 res = int2(1);
+  float2 res = float2(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.spvasm
index ad5dc10..71a0bed 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-         %20 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %18 = OpConstantNull %v2float
+         %19 = OpTypeFunction %v4float
  %abs_82ff9d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v2float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %abs_82ff9d
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %abs_82ff9d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_82ff9d
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_82ff9d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %abs_82ff9d
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_82ff9d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.wgsl
index 9bd3f7c..264b26b 100644
--- a/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/82ff9d.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_82ff9d() {
-  var res = abs(vec2(1));
+  var res = abs(vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl
index f99c3c8..c74fefe 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<4, ia>) -> vec<4, ia>
 fn abs_8ca9b1() {
-  var res = abs(vec4(1.0));
+  var res = abs(vec4(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.dxc.hlsl
index 254e652..ded6c62 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_8ca9b1() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.fxc.hlsl
index 254e652..ded6c62 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_8ca9b1() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.glsl
index 3e153f7..c3fce66 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_8ca9b1() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_8ca9b1() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_8ca9b1() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.msl
index 8dd66e4..4681936 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_8ca9b1() {
-  float4 res = float4(1.0f);
+  int4 res = int4(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.spvasm
index 967646f..447b039 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,35 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %19 = OpConstantNull %v4int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %17 = OpTypeFunction %v4float
  %abs_8ca9b1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_v4int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %abs_8ca9b1
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_8ca9b1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %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
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %abs_8ca9b1
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_8ca9b1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %abs_8ca9b1
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_8ca9b1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.wgsl
index 6817228..c9af059 100644
--- a/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/8ca9b1.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_8ca9b1() {
-  var res = abs(vec4(1.0));
+  var res = abs(vec4(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl
index b9167db..47d2310 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(fa) -> fa
 fn abs_aedb6d() {
-  var res = abs(1);
+  var res = abs(1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.dxc.hlsl
index c6333ed..1de84a5 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.fxc.hlsl
index c6333ed..1de84a5 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.glsl
index 8f21da4..a7d37b0 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.msl
index e27ed9f..3434978 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.spvasm
index f52b339..f41bcf1 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+         %16 = OpTypeFunction %v4float
  %abs_aedb6d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %17
-               OpStore %res %int_1
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %float_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %abs_aedb6d
+%vertex_main_inner = OpFunction %v4float None %16
+         %18 = OpLabel
+         %19 = OpFunctionCall %void %abs_aedb6d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %21 = OpLabel
+         %22 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %22
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_aedb6d
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %abs_aedb6d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_aedb6d
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_aedb6d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.wgsl
index 21a2cd9..7d26e94 100644
--- a/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/aedb6d.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_aedb6d() {
-  var res = abs(1);
+  var res = abs(1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl
index 4276e5b..02f8b1e 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<3, ia>) -> vec<3, ia>
 fn abs_c3321c() {
-  var res = abs(vec3(1.0));
+  var res = abs(vec3(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.dxc.hlsl
index d56d57a..0aa2ad9 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_c3321c() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.fxc.hlsl
index d56d57a..0aa2ad9 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_c3321c() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.glsl
index 6b1cea3..d9a6e95 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_c3321c() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_c3321c() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_c3321c() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.msl
index eed8424..ffdb7d7 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_c3321c() {
-  float3 res = float3(1.0f);
+  int3 res = int3(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.spvasm
index 92db6e9..c8fed58 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/c3321c.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %19 = OpConstantNull %v3int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-         %19 = OpTypeFunction %v4float
  %abs_c3321c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %abs_c3321c
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_c3321c
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_c3321c
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_c3321c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_c3321c
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_c3321c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.wgsl
index db49261..530331b 100644
--- a/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/c3321c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_c3321c() {
-  var res = abs(vec3(1.0));
+  var res = abs(vec3(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl b/test/tint/builtins/gen/literal/abs/e28785.wgsl
index 714f3e1..fef7ec2 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<4, fa>) -> vec<4, fa>
 fn abs_e28785() {
-  var res = abs(vec4(1));
+  var res = abs(vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.dxc.hlsl
index 0c83f68..46f6f3f 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_e28785() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.fxc.hlsl
index 0c83f68..46f6f3f 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_e28785() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.glsl b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.glsl
index ef86df6..4255eda 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_e28785() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_e28785() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_e28785() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.msl b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.msl
index f88e571..3f089fb 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_e28785() {
-  int4 res = int4(1);
+  float4 res = float4(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.spvasm
index fb64961..556e68f 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,35 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %17 = OpTypeFunction %v4float
  %abs_e28785 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %abs_e28785
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %abs_e28785
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_e28785
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %abs_e28785
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %abs_e28785
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %abs_e28785
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.wgsl
index 3bc8faa..daeba6b 100644
--- a/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/abs/e28785.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_e28785() {
-  var res = abs(vec4(1));
+  var res = abs(vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/16b543.wgsl b/test/tint/builtins/gen/literal/asinh/16b543.wgsl
index 31365a1..e6bb7c9 100644
--- a/test/tint/builtins/gen/literal/asinh/16b543.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/16b543.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(vec<2, fa>) -> vec<2, fa>
 fn asinh_16b543() {
-  var res = asinh(vec2(1));
+  var res = asinh(vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.wgsl
index f217102..8a0b120 100644
--- a/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/16b543.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_16b543() {
-  var res = asinh(vec2(1));
+  var res = asinh(vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/180015.wgsl b/test/tint/builtins/gen/literal/asinh/180015.wgsl
index 47c858b..13a71e5 100644
--- a/test/tint/builtins/gen/literal/asinh/180015.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/180015.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(fa) -> fa
 fn asinh_180015() {
-  var res = asinh(1);
+  var res = asinh(1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.wgsl
index 3f22b94..5df9254 100644
--- a/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/180015.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_180015() {
-  var res = asinh(1);
+  var res = asinh(1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/51079e.wgsl b/test/tint/builtins/gen/literal/asinh/51079e.wgsl
index fab89bb..ffa2088 100644
--- a/test/tint/builtins/gen/literal/asinh/51079e.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/51079e.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(vec<3, fa>) -> vec<3, fa>
 fn asinh_51079e() {
-  var res = asinh(vec3(1));
+  var res = asinh(vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.wgsl
index 2d5243a..f27857a 100644
--- a/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/51079e.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_51079e() {
-  var res = asinh(vec3(1));
+  var res = asinh(vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/cf8603.wgsl b/test/tint/builtins/gen/literal/asinh/cf8603.wgsl
index f95151e..e97e89c 100644
--- a/test/tint/builtins/gen/literal/asinh/cf8603.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/cf8603.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(vec<4, fa>) -> vec<4, fa>
 fn asinh_cf8603() {
-  var res = asinh(vec4(1));
+  var res = asinh(vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.wgsl
index 4b2dda5..3392655 100644
--- a/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/asinh/cf8603.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_cf8603() {
-  var res = asinh(vec4(1));
+  var res = asinh(vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl b/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl
index 1b43620..5368be1 100644
--- a/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl
+++ b/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(vec<2, fa>) -> vec<2, fa>
 fn atan_5ca7b8() {
-  var res = atan(vec2(1));
+  var res = atan(vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.wgsl
index d073436..26355d8 100644
--- a/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/5ca7b8.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_5ca7b8() {
-  var res = atan(vec2(1));
+  var res = atan(vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/749e1b.wgsl b/test/tint/builtins/gen/literal/atan/749e1b.wgsl
index 99655a7..63e018f 100644
--- a/test/tint/builtins/gen/literal/atan/749e1b.wgsl
+++ b/test/tint/builtins/gen/literal/atan/749e1b.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(vec<3, fa>) -> vec<3, fa>
 fn atan_749e1b() {
-  var res = atan(vec3(1));
+  var res = atan(vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.wgsl
index bd23c31..cc19ade 100644
--- a/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/749e1b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_749e1b() {
-  var res = atan(vec3(1));
+  var res = atan(vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/7a2a75.wgsl b/test/tint/builtins/gen/literal/atan/7a2a75.wgsl
index 51eddfb..f00b09c 100644
--- a/test/tint/builtins/gen/literal/atan/7a2a75.wgsl
+++ b/test/tint/builtins/gen/literal/atan/7a2a75.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(fa) -> fa
 fn atan_7a2a75() {
-  var res = atan(1);
+  var res = atan(1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.wgsl
index da9a954..0d93854 100644
--- a/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/7a2a75.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_7a2a75() {
-  var res = atan(1);
+  var res = atan(1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/d17fb2.wgsl b/test/tint/builtins/gen/literal/atan/d17fb2.wgsl
index 9b46759..0f2841b 100644
--- a/test/tint/builtins/gen/literal/atan/d17fb2.wgsl
+++ b/test/tint/builtins/gen/literal/atan/d17fb2.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(vec<4, fa>) -> vec<4, fa>
 fn atan_d17fb2() {
-  var res = atan(vec4(1));
+  var res = atan(vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.wgsl
index cc6d644..f1551a9 100644
--- a/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan/d17fb2.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_d17fb2() {
-  var res = atan(vec4(1));
+  var res = atan(vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/034ace.wgsl b/test/tint/builtins/gen/literal/atan2/034ace.wgsl
index 2e7ead5..400f9ca 100644
--- a/test/tint/builtins/gen/literal/atan2/034ace.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/034ace.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan2(fa, fa) -> fa
 fn atan2_034ace() {
-  var res = atan2(1, 1);
+  var res = atan2(1., 1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.wgsl
index 5e22efa..25f943e 100644
--- a/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/034ace.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan2_034ace() {
-  var res = atan2(1, 1);
+  var res = atan2(1.0, 1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/3c2865.wgsl b/test/tint/builtins/gen/literal/atan2/3c2865.wgsl
index e0da8cf..8563293 100644
--- a/test/tint/builtins/gen/literal/atan2/3c2865.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/3c2865.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan2(vec<3, fa>, vec<3, fa>) -> vec<3, fa>
 fn atan2_3c2865() {
-  var res = atan2(vec3(1), vec3(1));
+  var res = atan2(vec3(1.), vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.wgsl
index ee5ee3d..73fca7a 100644
--- a/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/3c2865.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan2_3c2865() {
-  var res = atan2(vec3(1), vec3(1));
+  var res = atan2(vec3(1.0), vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/c19683.wgsl b/test/tint/builtins/gen/literal/atan2/c19683.wgsl
index 7ea0343..efca3ab 100644
--- a/test/tint/builtins/gen/literal/atan2/c19683.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/c19683.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan2(vec<2, fa>, vec<2, fa>) -> vec<2, fa>
 fn atan2_c19683() {
-  var res = atan2(vec2(1), vec2(1));
+  var res = atan2(vec2(1.), vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.wgsl
index efb9bad..14175d0 100644
--- a/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/c19683.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan2_c19683() {
-  var res = atan2(vec2(1), vec2(1));
+  var res = atan2(vec2(1.0), vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/c4be45.wgsl b/test/tint/builtins/gen/literal/atan2/c4be45.wgsl
index a80cebe..9afdfaa 100644
--- a/test/tint/builtins/gen/literal/atan2/c4be45.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/c4be45.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan2(vec<4, fa>, vec<4, fa>) -> vec<4, fa>
 fn atan2_c4be45() {
-  var res = atan2(vec4(1), vec4(1));
+  var res = atan2(vec4(1.), vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.wgsl
index f5c94ec..b1ae91f 100644
--- a/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/atan2/c4be45.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan2_c4be45() {
-  var res = atan2(vec4(1), vec4(1));
+  var res = atan2(vec4(1.0), vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl b/test/tint/builtins/gen/literal/clamp/177548.wgsl
index b1020b4..a7a3f4b 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(vec<2, ia>, vec<2, ia>, vec<2, ia>) -> vec<2, ia>
 fn clamp_177548() {
-  var res = clamp(vec2(1.0), vec2(1.0), vec2(1.0));
+  var res = clamp(vec2(1), vec2(1), vec2(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.dxc.hlsl
index e6db476..0706d74 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_177548() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.fxc.hlsl
index e6db476..0706d74 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_177548() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.glsl
index aef0c70..cc6d48a 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_177548() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_177548() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_177548() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.msl
index 7c91b67..25d698d 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_177548() {
-  float2 res = float2(1.0f);
+  int2 res = int2(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.spvasm
index 2b2e5dc..2a9b2c6 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/177548.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %19 = OpConstantNull %v2int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-         %19 = OpTypeFunction %v4float
 %clamp_177548 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %clamp_177548
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_177548
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_177548
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_177548
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_177548
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_177548
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.wgsl
index 43342f9..fc13825 100644
--- a/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/177548.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_177548() {
-  var res = clamp(vec2(1.0), vec2(1.0), vec2(1.0));
+  var res = clamp(vec2(1), vec2(1), vec2(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl
index b02caee..2bbd266 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(fa, fa, fa) -> fa
 fn clamp_23aa4f() {
-  var res = clamp(1, 1, 1);
+  var res = clamp(1., 1., 1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.dxc.hlsl
index 95967c6..7b0cd06 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.fxc.hlsl
index 95967c6..7b0cd06 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.glsl
index 745c8d9..cf8f34c 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.msl
index e6b476f..29d1fc6 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.spvasm
index 9e7f69b..7a5bccc 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+         %16 = OpTypeFunction %v4float
 %clamp_23aa4f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %17
-               OpStore %res %int_1
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %float_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %clamp_23aa4f
+%vertex_main_inner = OpFunction %v4float None %16
+         %18 = OpLabel
+         %19 = OpFunctionCall %void %clamp_23aa4f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %21 = OpLabel
+         %22 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %22
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_23aa4f
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %clamp_23aa4f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_23aa4f
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_23aa4f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.wgsl
index 8750791..e6a7bb4 100644
--- a/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/23aa4f.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_23aa4f() {
-  var res = clamp(1, 1, 1);
+  var res = clamp(1.0, 1.0, 1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl
index 4127bb8..4e81cf3 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(vec<3, fa>, vec<3, fa>, vec<3, fa>) -> vec<3, fa>
 fn clamp_5cf700() {
-  var res = clamp(vec3(1), vec3(1), vec3(1));
+  var res = clamp(vec3(1.), vec3(1.), vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.dxc.hlsl
index 06d6121..ecb46df 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_5cf700() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.fxc.hlsl
index 06d6121..ecb46df 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_5cf700() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.glsl
index a1ce575..2cd1427 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_5cf700() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_5cf700() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_5cf700() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.msl
index 55c384c..ca116af 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_5cf700() {
-  int3 res = int3(1);
+  float3 res = float3(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.spvasm
index 3b26aca..4414636 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %19 = OpConstantNull %v3int
-         %20 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %18 = OpConstantNull %v3float
+         %19 = OpTypeFunction %v4float
 %clamp_5cf700 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v3float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %clamp_5cf700
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %clamp_5cf700
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_5cf700
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_5cf700
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %clamp_5cf700
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_5cf700
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.wgsl
index c7f5c1e..0d0d44b 100644
--- a/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/5cf700.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_5cf700() {
-  var res = clamp(vec3(1), vec3(1), vec3(1));
+  var res = clamp(vec3(1.0), vec3(1.0), vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl
index e24da63..6e3a04a 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(vec<4, fa>, vec<4, fa>, vec<4, fa>) -> vec<4, fa>
 fn clamp_87df46() {
-  var res = clamp(vec4(1), vec4(1), vec4(1));
+  var res = clamp(vec4(1.), vec4(1.), vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.dxc.hlsl
index 8af196a..f9670d0 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_87df46() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.fxc.hlsl
index 8af196a..f9670d0 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_87df46() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.glsl
index b3db98f..1d592a4 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_87df46() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_87df46() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_87df46() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.msl
index 62aa4bb..54934f7 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_87df46() {
-  int4 res = int4(1);
+  float4 res = float4(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.spvasm
index 0e03650..3273991 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,35 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %17 = OpTypeFunction %v4float
 %clamp_87df46 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %clamp_87df46
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %clamp_87df46
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_87df46
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %clamp_87df46
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %clamp_87df46
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %clamp_87df46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.wgsl
index eeb22ce..8715125 100644
--- a/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/87df46.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_87df46() {
-  var res = clamp(vec4(1), vec4(1), vec4(1));
+  var res = clamp(vec4(1.0), vec4(1.0), vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl
index e849cc8..bfa3d60 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(vec<3, ia>, vec<3, ia>, vec<3, ia>) -> vec<3, ia>
 fn clamp_8b1eaa() {
-  var res = clamp(vec3(1.0), vec3(1.0), vec3(1.0));
+  var res = clamp(vec3(1), vec3(1), vec3(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.dxc.hlsl
index 8270dd1..9ffb0cb 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_8b1eaa() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.fxc.hlsl
index 8270dd1..9ffb0cb 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_8b1eaa() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.glsl
index 6729165..12ccf0f 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_8b1eaa() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_8b1eaa() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_8b1eaa() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.msl
index 786aaaa..fb40ee7 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_8b1eaa() {
-  float3 res = float3(1.0f);
+  int3 res = int3(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.spvasm
index faa36f5..37134e6 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %19 = OpConstantNull %v3int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-         %19 = OpTypeFunction %v4float
 %clamp_8b1eaa = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %clamp_8b1eaa
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_8b1eaa
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_8b1eaa
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_8b1eaa
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_8b1eaa
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_8b1eaa
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.wgsl
index bda46e9..652ec0d 100644
--- a/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/8b1eaa.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_8b1eaa() {
-  var res = clamp(vec3(1.0), vec3(1.0), vec3(1.0));
+  var res = clamp(vec3(1), vec3(1), vec3(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl
index 1babcf7..2cdba00 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(ia, ia, ia) -> ia
 fn clamp_96e56a() {
-  var res = clamp(1.0, 1.0, 1.0);
+  var res = clamp(1, 1, 1);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.dxc.hlsl
index 6231928..b445f25 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.fxc.hlsl
index 6231928..b445f25 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.glsl
index c7dbb9b..cf52b93 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.msl
index a28781c..46325a2 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.spvasm
index 07544da..0097629 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,34 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %17 = OpConstantNull %int
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpTypeFunction %v4float
 %clamp_96e56a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %res %float_1
+        %res = OpVariable %_ptr_Function_int Function %17
+               OpStore %res %int_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %16
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %clamp_96e56a
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %clamp_96e56a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %21 = OpLabel
-         %22 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %22
+         %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
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %clamp_96e56a
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_96e56a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_96e56a
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_96e56a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.wgsl
index 20f3055..de9a554 100644
--- a/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/96e56a.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_96e56a() {
-  var res = clamp(1.0, 1.0, 1.0);
+  var res = clamp(1, 1, 1);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl
index b766bbf..0bc1cb2 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(vec<2, fa>, vec<2, fa>, vec<2, fa>) -> vec<2, fa>
 fn clamp_9d731c() {
-  var res = clamp(vec2(1), vec2(1), vec2(1));
+  var res = clamp(vec2(1.), vec2(1.), vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.dxc.hlsl
index 25efa1a..b14e434 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_9d731c() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.fxc.hlsl
index 25efa1a..b14e434 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_9d731c() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.glsl
index 8f283b5..554727e 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_9d731c() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_9d731c() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_9d731c() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.msl
index 5a78c71..3ac366f 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_9d731c() {
-  int2 res = int2(1);
+  float2 res = float2(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.spvasm
index 533a9b0..57bec99 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-         %20 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %18 = OpConstantNull %v2float
+         %19 = OpTypeFunction %v4float
 %clamp_9d731c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v2float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %clamp_9d731c
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %clamp_9d731c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_9d731c
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_9d731c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %clamp_9d731c
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_9d731c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.wgsl
index d4da0fb..989ca72 100644
--- a/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/9d731c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_9d731c() {
-  var res = clamp(vec2(1), vec2(1), vec2(1));
+  var res = clamp(vec2(1.0), vec2(1.0), vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl
index de2b9e5..569fe01 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl
@@ -23,7 +23,7 @@
 
 // fn clamp(vec<4, ia>, vec<4, ia>, vec<4, ia>) -> vec<4, ia>
 fn clamp_d396af() {
-  var res = clamp(vec4(1.0), vec4(1.0), vec4(1.0));
+  var res = clamp(vec4(1), vec4(1), vec4(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.dxc.hlsl
index 1f04061..bb6559a 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_d396af() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.fxc.hlsl
index 1f04061..bb6559a 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_d396af() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.glsl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.glsl
index 57aa017..7c41a2f 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_d396af() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_d396af() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_d396af() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.msl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.msl
index 3a1316e..1020d60 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_d396af() {
-  float4 res = float4(1.0f);
+  int4 res = int4(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.spvasm
index 4403ee44..382a87f 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,35 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %19 = OpConstantNull %v4int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %17 = OpTypeFunction %v4float
 %clamp_d396af = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_v4int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %clamp_d396af
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_d396af
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %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
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %clamp_d396af
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_d396af
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %clamp_d396af
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_d396af
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.wgsl
index 973eb90..e0ef4db 100644
--- a/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/clamp/d396af.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn clamp_d396af() {
-  var res = clamp(vec4(1.0), vec4(1.0), vec4(1.0));
+  var res = clamp(vec4(1), vec4(1), vec4(1));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl b/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl
index d730ec4d..81fb61d 100644
--- a/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(vec<4, fa>) -> vec<4, fa>
 fn saturate_4ed8d7() {
-  var res = saturate(vec4(2));
+  var res = saturate(vec4(2.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.wgsl
index 4ef9207..6fe6108 100644
--- a/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/4ed8d7.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_4ed8d7() {
-  var res = saturate(vec4(2));
+  var res = saturate(vec4(2.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/78b37c.wgsl b/test/tint/builtins/gen/literal/saturate/78b37c.wgsl
index 4ac82c1..0c8a403 100644
--- a/test/tint/builtins/gen/literal/saturate/78b37c.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/78b37c.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(fa) -> fa
 fn saturate_78b37c() {
-  var res = saturate(2);
+  var res = saturate(2.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.wgsl
index 43b22f6..9d0e4d6 100644
--- a/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/78b37c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_78b37c() {
-  var res = saturate(2);
+  var res = saturate(2.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/d55822.wgsl b/test/tint/builtins/gen/literal/saturate/d55822.wgsl
index 4ed8e48..fc73316 100644
--- a/test/tint/builtins/gen/literal/saturate/d55822.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/d55822.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(vec<3, fa>) -> vec<3, fa>
 fn saturate_d55822() {
-  var res = saturate(vec3(2));
+  var res = saturate(vec3(2.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.wgsl
index 98847cc..24b8308 100644
--- a/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/d55822.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_d55822() {
-  var res = saturate(vec3(2));
+  var res = saturate(vec3(2.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl b/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl
index f1e6275..36003fb 100644
--- a/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(vec<2, fa>) -> vec<2, fa>
 fn saturate_e40fb6() {
-  var res = saturate(vec2(2));
+  var res = saturate(vec2(2.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.wgsl
index b20c99e..6cdb694 100644
--- a/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/saturate/e40fb6.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_e40fb6() {
-  var res = saturate(vec2(2));
+  var res = saturate(vec2(2.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl b/test/tint/builtins/gen/literal/select/089657.wgsl
index d47aabe..82f4758 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<3, fa>, vec<3, fa>, bool) -> vec<3, fa>
 fn select_089657() {
-  var res = select(vec3(1), vec3(1), true);
+  var res = select(vec3(1.), vec3(1.), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.dxc.hlsl
index f2d7718..2f05ffb 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_089657() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.fxc.hlsl
index f2d7718..2f05ffb 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_089657() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.glsl
index 6fcb164..98a7e95 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_089657() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_089657() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_089657() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.msl
index 588dd1a..534c58d 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_089657() {
-  int3 res = int3(1);
+  float3 res = float3(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.spvasm
index 9ecd1f6..e783de4 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %19 = OpConstantNull %v3int
-         %20 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %18 = OpConstantNull %v3float
+         %19 = OpTypeFunction %v4float
 %select_089657 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v3float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %select_089657
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %select_089657
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_089657
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_089657
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %select_089657
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_089657
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.wgsl
index 1855c52..bb0dd8a 100644
--- a/test/tint/builtins/gen/literal/select/089657.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/089657.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_089657() {
-  var res = select(vec3(1), vec3(1), true);
+  var res = select(vec3(1.0), vec3(1.0), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl b/test/tint/builtins/gen/literal/select/17441a.wgsl
index 2ff8210..43e37e5 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<4, fa>, vec<4, fa>, bool) -> vec<4, fa>
 fn select_17441a() {
-  var res = select(vec4(1), vec4(1), true);
+  var res = select(vec4(1.), vec4(1.), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.dxc.hlsl
index 9051e8c..fa2a47b 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_17441a() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.fxc.hlsl
index 9051e8c..fa2a47b 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_17441a() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.glsl
index 28ec5fa..0bf0b8c 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_17441a() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_17441a() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_17441a() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.msl
index c5476ad..574e009 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_17441a() {
-  int4 res = int4(1);
+  float4 res = float4(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.spvasm
index e1b41e5..a098487 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,35 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %17 = OpTypeFunction %v4float
 %select_17441a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %select_17441a
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %select_17441a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_17441a
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %select_17441a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %select_17441a
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %select_17441a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.wgsl
index c67c505..b6f237d 100644
--- a/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/17441a.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_17441a() {
-  var res = select(vec4(1), vec4(1), true);
+  var res = select(vec4(1.0), vec4(1.0), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl
index 39fc716..58d01ce 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<2, fa>, vec<2, fa>, vec<2, bool>) -> vec<2, fa>
 fn select_1f4d93() {
-  var res = select(vec2(1), vec2(1), vec2<bool>(true));
+  var res = select(vec2(1.), vec2(1.), vec2<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.dxc.hlsl
index 82aa3bd..1232e45 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_1f4d93() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.fxc.hlsl
index 82aa3bd..1232e45 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_1f4d93() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.glsl
index cfee134..930bc64 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_1f4d93() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_1f4d93() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_1f4d93() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.msl
index d0a3e49..f806225 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_1f4d93() {
-  int2 res = int2(1);
+  float2 res = float2(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.spvasm
index 839806a..0fd9006 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-         %20 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %18 = OpConstantNull %v2float
+         %19 = OpTypeFunction %v4float
 %select_1f4d93 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v2float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %select_1f4d93
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %select_1f4d93
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_1f4d93
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_1f4d93
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %select_1f4d93
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_1f4d93
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.wgsl
index bb7262b..0d04662 100644
--- a/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/1f4d93.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_1f4d93() {
-  var res = select(vec2(1), vec2(1), vec2<bool>(true));
+  var res = select(vec2(1.0), vec2(1.0), vec2<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl
index 561e714..5094989 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<3, fa>, vec<3, fa>, vec<3, bool>) -> vec<3, fa>
 fn select_2c96d4() {
-  var res = select(vec3(1), vec3(1), vec3<bool>(true));
+  var res = select(vec3(1.), vec3(1.), vec3<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.dxc.hlsl
index e2a7f24..7bde6a5 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_2c96d4() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.fxc.hlsl
index e2a7f24..7bde6a5 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_2c96d4() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.glsl
index 1d78e5a..4757c32 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_2c96d4() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_2c96d4() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_2c96d4() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.msl
index dcea160..32110ba 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_2c96d4() {
-  int3 res = int3(1);
+  float3 res = float3(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.spvasm
index 7c22428..04adc34 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %19 = OpConstantNull %v3int
-         %20 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %18 = OpConstantNull %v3float
+         %19 = OpTypeFunction %v4float
 %select_2c96d4 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v3float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %select_2c96d4
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %select_2c96d4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_2c96d4
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_2c96d4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %select_2c96d4
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_2c96d4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.wgsl
index 1206e99..cf920c9 100644
--- a/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/2c96d4.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_2c96d4() {
-  var res = select(vec3(1), vec3(1), vec3<bool>(true));
+  var res = select(vec3(1.0), vec3(1.0), vec3<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl b/test/tint/builtins/gen/literal/select/3a14be.wgsl
index 1913688..2a77bdd 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<2, ia>, vec<2, ia>, bool) -> vec<2, ia>
 fn select_3a14be() {
-  var res = select(vec2(1.0), vec2(1.0), true);
+  var res = select(vec2(1), vec2(1), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.dxc.hlsl
index 22346fa..fbd19fe 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_3a14be() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.fxc.hlsl
index 22346fa..fbd19fe 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_3a14be() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.glsl
index e087441..f7f5033 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_3a14be() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_3a14be() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_3a14be() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.msl
index 1b30556..635fb5e 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_3a14be() {
-  float2 res = float2(1.0f);
+  int2 res = int2(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.spvasm
index d2f8374..19084ba 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/3a14be.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %19 = OpConstantNull %v2int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-         %19 = OpTypeFunction %v4float
 %select_3a14be = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %select_3a14be
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_3a14be
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_3a14be
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_3a14be
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_3a14be
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_3a14be
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.wgsl
index 31e57a1..87fc0a8 100644
--- a/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/3a14be.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_3a14be() {
-  var res = select(vec2(1.0), vec2(1.0), true);
+  var res = select(vec2(1), vec2(1), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl b/test/tint/builtins/gen/literal/select/431dfb.wgsl
index 00c5f8f..a9990e8 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<2, ia>, vec<2, ia>, vec<2, bool>) -> vec<2, ia>
 fn select_431dfb() {
-  var res = select(vec2(1.0), vec2(1.0), vec2<bool>(true));
+  var res = select(vec2(1), vec2(1), vec2<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.dxc.hlsl
index ede2038..df657ae 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_431dfb() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.fxc.hlsl
index ede2038..df657ae 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_431dfb() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.glsl
index 41b3954..5c2a42c 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_431dfb() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_431dfb() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_431dfb() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.msl
index 7f93cbc..2431b72 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_431dfb() {
-  float2 res = float2(1.0f);
+  int2 res = int2(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.spvasm
index 3fa7edf..4ef8804 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/431dfb.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %19 = OpConstantNull %v2int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-         %19 = OpTypeFunction %v4float
 %select_431dfb = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %select_431dfb
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_431dfb
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_431dfb
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_431dfb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_431dfb
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_431dfb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.wgsl
index 19e7f95..575799e 100644
--- a/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/431dfb.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_431dfb() {
-  var res = select(vec2(1.0), vec2(1.0), vec2<bool>(true));
+  var res = select(vec2(1), vec2(1), vec2<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl b/test/tint/builtins/gen/literal/select/43741e.wgsl
index bfc51fb..f6d41b8 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<4, fa>, vec<4, fa>, vec<4, bool>) -> vec<4, fa>
 fn select_43741e() {
-  var res = select(vec4(1), vec4(1), vec4<bool>(true));
+  var res = select(vec4(1.), vec4(1.), vec4<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.dxc.hlsl
index 5a9cab5..893ce8f 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_43741e() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.fxc.hlsl
index 5a9cab5..893ce8f 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_43741e() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.glsl
index 9b3d87d..502a2e4 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_43741e() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_43741e() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_43741e() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.msl
index 13576be..590cd5a 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_43741e() {
-  int4 res = int4(1);
+  float4 res = float4(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.spvasm
index 35bb1f7..8e7e4c1 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,35 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %17 = OpTypeFunction %v4float
 %select_43741e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %select_43741e
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %select_43741e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_43741e
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %select_43741e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %select_43741e
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %select_43741e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.wgsl
index eacc89b..6a52b32 100644
--- a/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/43741e.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_43741e() {
-  var res = select(vec4(1), vec4(1), vec4<bool>(true));
+  var res = select(vec4(1.0), vec4(1.0), vec4<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl b/test/tint/builtins/gen/literal/select/494051.wgsl
index 2034c91..820d87e 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(fa, fa, bool) -> fa
 fn select_494051() {
-  var res = select(1, 1, true);
+  var res = select(1., 1., true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.dxc.hlsl
index 14a81e0..ff461ea 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_494051() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.fxc.hlsl
index 14a81e0..ff461ea 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_494051() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.glsl
index d098cb2..616fcc2 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_494051() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_494051() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_494051() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.msl
index c10821f..3275330 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_494051() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.spvasm
index c71721d..a4a1e51 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+         %16 = OpTypeFunction %v4float
 %select_494051 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %17
-               OpStore %res %int_1
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %float_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %select_494051
+%vertex_main_inner = OpFunction %v4float None %16
+         %18 = OpLabel
+         %19 = OpFunctionCall %void %select_494051
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %21 = OpLabel
+         %22 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %22
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_494051
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %select_494051
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_494051
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_494051
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.wgsl
index 9a91518..b766e5d 100644
--- a/test/tint/builtins/gen/literal/select/494051.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/494051.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_494051() {
-  var res = select(1, 1, true);
+  var res = select(1.0, 1.0, true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl b/test/tint/builtins/gen/literal/select/4c4738.wgsl
index 69541be..51e053a 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<4, ia>, vec<4, ia>, vec<4, bool>) -> vec<4, ia>
 fn select_4c4738() {
-  var res = select(vec4(1.0), vec4(1.0), vec4<bool>(true));
+  var res = select(vec4(1), vec4(1), vec4<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.dxc.hlsl
index 2186b86..40175a9 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_4c4738() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.fxc.hlsl
index 2186b86..40175a9 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_4c4738() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.glsl
index 7fc35db..f2e5a9a 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_4c4738() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_4c4738() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_4c4738() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.msl
index 2ca6118..964cec4 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_4c4738() {
-  float4 res = float4(1.0f);
+  int4 res = int4(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.spvasm
index 9f57347..6795c91 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,35 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %19 = OpConstantNull %v4int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %17 = OpTypeFunction %v4float
 %select_4c4738 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_v4int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %select_4c4738
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_4c4738
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %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
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %select_4c4738
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_4c4738
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %select_4c4738
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_4c4738
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.wgsl
index af92edb..a54f5ee 100644
--- a/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/4c4738.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_4c4738() {
-  var res = select(vec4(1.0), vec4(1.0), vec4<bool>(true));
+  var res = select(vec4(1), vec4(1), vec4<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl b/test/tint/builtins/gen/literal/select/4e60da.wgsl
index f40ff21..ccc5a07 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<2, fa>, vec<2, fa>, bool) -> vec<2, fa>
 fn select_4e60da() {
-  var res = select(vec2(1), vec2(1), true);
+  var res = select(vec2(1.), vec2(1.), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.dxc.hlsl
index 72f42f7..43e2e4e 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_4e60da() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.fxc.hlsl
index 72f42f7..43e2e4e 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_4e60da() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.glsl
index 815c0ce..e457b9d 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_4e60da() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_4e60da() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_4e60da() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.msl
index ad6911b..df8c30d 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_4e60da() {
-  int2 res = int2(1);
+  float2 res = float2(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.spvasm
index 118769b..c54cd87 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-         %20 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %18 = OpConstantNull %v2float
+         %19 = OpTypeFunction %v4float
 %select_4e60da = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v2float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %select_4e60da
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %select_4e60da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %select_4e60da
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_4e60da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %select_4e60da
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_4e60da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.wgsl
index b913710..dca50c6 100644
--- a/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/4e60da.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_4e60da() {
-  var res = select(vec2(1), vec2(1), true);
+  var res = select(vec2(1.0), vec2(1.0), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl b/test/tint/builtins/gen/literal/select/9b478d.wgsl
index f165558..e0c6d5b 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(ia, ia, bool) -> ia
 fn select_9b478d() {
-  var res = select(1.0, 1.0, true);
+  var res = select(1, 1, true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.dxc.hlsl
index 5400451..b9f42f3 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_9b478d() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.fxc.hlsl
index 5400451..b9f42f3 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_9b478d() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.glsl
index 0f1b3d0..35d7abb 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_9b478d() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_9b478d() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_9b478d() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.msl
index 4744e7a..427d75b 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_9b478d() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.spvasm
index 3ca443a..3c53e2d 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,34 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %17 = OpConstantNull %int
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpTypeFunction %v4float
 %select_9b478d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %res %float_1
+        %res = OpVariable %_ptr_Function_int Function %17
+               OpStore %res %int_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %16
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %select_9b478d
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %select_9b478d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %21 = OpLabel
-         %22 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %22
+         %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
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %select_9b478d
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_9b478d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_9b478d
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_9b478d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.wgsl
index 886df0d..b43eb70 100644
--- a/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/9b478d.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_9b478d() {
-  var res = select(1.0, 1.0, true);
+  var res = select(1, 1, true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl b/test/tint/builtins/gen/literal/select/b93806.wgsl
index 9c7d498..c4808ce 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<3, ia>, vec<3, ia>, vec<3, bool>) -> vec<3, ia>
 fn select_b93806() {
-  var res = select(vec3(1.0), vec3(1.0), vec3<bool>(true));
+  var res = select(vec3(1), vec3(1), vec3<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.dxc.hlsl
index 2ba5be3..b4da4d6 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_b93806() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.fxc.hlsl
index 2ba5be3..b4da4d6 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_b93806() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.glsl
index db609c8..a3a1139 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_b93806() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_b93806() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_b93806() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.msl
index 5d45b26..bc20240 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_b93806() {
-  float3 res = float3(1.0f);
+  int3 res = int3(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.spvasm
index cfeb646..3b33c89 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/b93806.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %19 = OpConstantNull %v3int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-         %19 = OpTypeFunction %v4float
 %select_b93806 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %select_b93806
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_b93806
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_b93806
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_b93806
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_b93806
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_b93806
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.wgsl
index d518b43..d6c0178 100644
--- a/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/b93806.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_b93806() {
-  var res = select(vec3(1.0), vec3(1.0), vec3<bool>(true));
+  var res = select(vec3(1), vec3(1), vec3<bool>(true));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl
index d01e23b..6f55788 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<3, ia>, vec<3, ia>, bool) -> vec<3, ia>
 fn select_dfab3b() {
-  var res = select(vec3(1.0), vec3(1.0), true);
+  var res = select(vec3(1), vec3(1), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.dxc.hlsl
index 353db6e..0bb1ca4 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_dfab3b() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.fxc.hlsl
index 353db6e..0bb1ca4 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_dfab3b() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.glsl
index b10eb86..d2aea07 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_dfab3b() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_dfab3b() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_dfab3b() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.msl
index e99afc1..fe6b140 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_dfab3b() {
-  float3 res = float3(1.0f);
+  int3 res = int3(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.spvasm
index c69ae4b..5064800 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/dfab3b.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %19 = OpConstantNull %v3int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-         %19 = OpTypeFunction %v4float
 %select_dfab3b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %select_dfab3b
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_dfab3b
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_dfab3b
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_dfab3b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_dfab3b
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_dfab3b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.wgsl
index 1495e0f..08cd6b6 100644
--- a/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/dfab3b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_dfab3b() {
-  var res = select(vec3(1.0), vec3(1.0), true);
+  var res = select(vec3(1), vec3(1), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl b/test/tint/builtins/gen/literal/select/e381c3.wgsl
index c38a0e4..6f301eb 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl
@@ -23,7 +23,7 @@
 
 // fn select(vec<4, ia>, vec<4, ia>, bool) -> vec<4, ia>
 fn select_e381c3() {
-  var res = select(vec4(1.0), vec4(1.0), true);
+  var res = select(vec4(1), vec4(1), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.dxc.hlsl
index ab06e71..348b460 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void select_e381c3() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.fxc.hlsl
index ab06e71..348b460 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void select_e381c3() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.glsl b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.glsl
index b7807ed..e82544c 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void select_e381c3() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void select_e381c3() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void select_e381c3() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.msl b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.msl
index d5f75ad..e4f5c64 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void select_e381c3() {
-  float4 res = float4(1.0f);
+  int4 res = int4(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.spvasm
index b208fee..9444cec 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,35 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %19 = OpConstantNull %v4int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %17 = OpTypeFunction %v4float
 %select_e381c3 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_v4int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %select_e381c3
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %select_e381c3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %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
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %select_e381c3
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %select_e381c3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %select_e381c3
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %select_e381c3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.wgsl
index 530838f..0cfaabd 100644
--- a/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/select/e381c3.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn select_e381c3() {
-  var res = select(vec4(1.0), vec4(1.0), true);
+  var res = select(vec4(1), vec4(1), true);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/0799fd.wgsl b/test/tint/builtins/gen/literal/sign/0799fd.wgsl
index 2aac595..a632d85 100644
--- a/test/tint/builtins/gen/literal/sign/0799fd.wgsl
+++ b/test/tint/builtins/gen/literal/sign/0799fd.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(vec<2, fa>) -> vec<2, fa>
 fn sign_0799fd() {
-  var res = sign(vec2(1));
+  var res = sign(vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.wgsl
index 945a42b..f63d989 100644
--- a/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/0799fd.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_0799fd() {
-  var res = sign(vec2(1));
+  var res = sign(vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/ab6301.wgsl b/test/tint/builtins/gen/literal/sign/ab6301.wgsl
index e75ab68..7f86ac8 100644
--- a/test/tint/builtins/gen/literal/sign/ab6301.wgsl
+++ b/test/tint/builtins/gen/literal/sign/ab6301.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(vec<3, fa>) -> vec<3, fa>
 fn sign_ab6301() {
-  var res = sign(vec3(1));
+  var res = sign(vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.wgsl
index 0109196..1d60ad4 100644
--- a/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/ab6301.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_ab6301() {
-  var res = sign(vec3(1));
+  var res = sign(vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/c8289c.wgsl b/test/tint/builtins/gen/literal/sign/c8289c.wgsl
index 7b6a065..8cd59e1 100644
--- a/test/tint/builtins/gen/literal/sign/c8289c.wgsl
+++ b/test/tint/builtins/gen/literal/sign/c8289c.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(fa) -> fa
 fn sign_c8289c() {
-  var res = sign(1);
+  var res = sign(1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.wgsl
index 3c04064..c2426d2 100644
--- a/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/c8289c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_c8289c() {
-  var res = sign(1);
+  var res = sign(1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/f5da6a.wgsl b/test/tint/builtins/gen/literal/sign/f5da6a.wgsl
index 17b6d68..3b5c1d7 100644
--- a/test/tint/builtins/gen/literal/sign/f5da6a.wgsl
+++ b/test/tint/builtins/gen/literal/sign/f5da6a.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(vec<4, fa>) -> vec<4, fa>
 fn sign_f5da6a() {
-  var res = sign(vec4(1));
+  var res = sign(vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.wgsl
index 25336af..1b57a94d5 100644
--- a/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/sign/f5da6a.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_f5da6a() {
-  var res = sign(vec4(1));
+  var res = sign(vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/38cd79.wgsl b/test/tint/builtins/gen/literal/step/38cd79.wgsl
index c2ed3af..2663d42 100644
--- a/test/tint/builtins/gen/literal/step/38cd79.wgsl
+++ b/test/tint/builtins/gen/literal/step/38cd79.wgsl
@@ -23,7 +23,7 @@
 
 // fn step(vec<4, fa>, vec<4, fa>) -> vec<4, fa>
 fn step_38cd79() {
-  var res = step(vec4(1), vec4(1));
+  var res = step(vec4(1.), vec4(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.wgsl
index 06dbd75..2571dfc 100644
--- a/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/38cd79.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn step_38cd79() {
-  var res = step(vec4(1), vec4(1));
+  var res = step(vec4(1.0), vec4(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/415879.wgsl b/test/tint/builtins/gen/literal/step/415879.wgsl
index 0332e12..98c73a6 100644
--- a/test/tint/builtins/gen/literal/step/415879.wgsl
+++ b/test/tint/builtins/gen/literal/step/415879.wgsl
@@ -23,7 +23,7 @@
 
 // fn step(vec<3, fa>, vec<3, fa>) -> vec<3, fa>
 fn step_415879() {
-  var res = step(vec3(1), vec3(1));
+  var res = step(vec3(1.), vec3(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/415879.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/415879.wgsl.expected.wgsl
index 37ed1f9..7636eaf 100644
--- a/test/tint/builtins/gen/literal/step/415879.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/415879.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn step_415879() {
-  var res = step(vec3(1), vec3(1));
+  var res = step(vec3(1.0), vec3(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/7c7e5c.wgsl b/test/tint/builtins/gen/literal/step/7c7e5c.wgsl
index 8713980..ec22df6 100644
--- a/test/tint/builtins/gen/literal/step/7c7e5c.wgsl
+++ b/test/tint/builtins/gen/literal/step/7c7e5c.wgsl
@@ -23,7 +23,7 @@
 
 // fn step(vec<2, fa>, vec<2, fa>) -> vec<2, fa>
 fn step_7c7e5c() {
-  var res = step(vec2(1), vec2(1));
+  var res = step(vec2(1.), vec2(1.));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.wgsl
index 8915183..dba1960 100644
--- a/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/7c7e5c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn step_7c7e5c() {
-  var res = step(vec2(1), vec2(1));
+  var res = step(vec2(1.0), vec2(1.0));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/f9b70c.wgsl b/test/tint/builtins/gen/literal/step/f9b70c.wgsl
index 71339b0..50c33a1 100644
--- a/test/tint/builtins/gen/literal/step/f9b70c.wgsl
+++ b/test/tint/builtins/gen/literal/step/f9b70c.wgsl
@@ -23,7 +23,7 @@
 
 // fn step(fa, fa) -> fa
 fn step_f9b70c() {
-  var res = step(1, 1);
+  var res = step(1., 1.);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.wgsl
index bf04295..33613ae 100644
--- a/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/step/f9b70c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn step_f9b70c() {
-  var res = step(1, 1);
+  var res = step(1.0, 1.0);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl b/test/tint/builtins/gen/var/abs/2f861b.wgsl
index 53d4077..ce953f8 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<3, fa>) -> vec<3, fa>
 fn abs_2f861b() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.dxc.hlsl
index 6315af3..d3dc754 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_2f861b() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.fxc.hlsl
index 6315af3..d3dc754 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_2f861b() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.glsl
index b669674..b068d2d 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_2f861b() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_2f861b() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_2f861b() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.msl
index d985285..3fef020 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_2f861b() {
-  int3 res = int3(1);
+  float3 res = float3(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.spvasm
index b10efe2..2060ef1 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %19 = OpConstantNull %v3int
-         %20 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %18 = OpConstantNull %v3float
+         %19 = OpTypeFunction %v4float
  %abs_2f861b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v3float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %abs_2f861b
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %abs_2f861b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_2f861b
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_2f861b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %abs_2f861b
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_2f861b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.wgsl
index b4e57c3..0fa385f 100644
--- a/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/2f861b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_2f861b() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.0);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl b/test/tint/builtins/gen/var/abs/577d6e.wgsl
index 1a897e6..c974324 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl
+++ b/test/tint/builtins/gen/var/abs/577d6e.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<2, ia>) -> vec<2, ia>
 fn abs_577d6e() {
-  const arg_0 = vec2(1.0);
+  const arg_0 = vec2(1);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.dxc.hlsl
index b4f3ce7..d24e2b9 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_577d6e() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.fxc.hlsl
index b4f3ce7..d24e2b9 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_577d6e() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.glsl
index 096262c..43a48a3 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_577d6e() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_577d6e() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_577d6e() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.msl
index 4e92bd1..2d6f835 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_577d6e() {
-  float2 res = float2(1.0f);
+  int2 res = int2(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.spvasm
index 648166a..684510a 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/577d6e.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %19 = OpConstantNull %v2int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-         %19 = OpTypeFunction %v4float
  %abs_577d6e = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %abs_577d6e
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_577d6e
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_577d6e
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_577d6e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_577d6e
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_577d6e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.wgsl
index 9ba7c2e..1081515 100644
--- a/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/577d6e.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_577d6e() {
-  const arg_0 = vec2(1.0);
+  const arg_0 = vec2(1);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl b/test/tint/builtins/gen/var/abs/5a8af1.wgsl
index 35d7360..d8ca2bd 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(ia) -> ia
 fn abs_5a8af1() {
-  const arg_0 = 1.0;
+  const arg_0 = 1;
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.dxc.hlsl
index d571cd6..86901c6 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.fxc.hlsl
index d571cd6..86901c6 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.glsl
index 98ca290..d454d02 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.msl
index 6ef8f36..a3468f9 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_5a8af1() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.spvasm
index 5027752..6201ee3 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,34 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %17 = OpConstantNull %int
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpTypeFunction %v4float
  %abs_5a8af1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %res %float_1
+        %res = OpVariable %_ptr_Function_int Function %17
+               OpStore %res %int_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %16
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %abs_5a8af1
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %abs_5a8af1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %21 = OpLabel
-         %22 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %22
+         %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
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %abs_5a8af1
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_5a8af1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_5a8af1
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_5a8af1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.wgsl
index f5a71c3..2636aa1 100644
--- a/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/5a8af1.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_5a8af1() {
-  const arg_0 = 1.0;
+  const arg_0 = 1;
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl b/test/tint/builtins/gen/var/abs/82ff9d.wgsl
index 1a12b86..60bc479 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<2, fa>) -> vec<2, fa>
 fn abs_82ff9d() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.dxc.hlsl
index 60243f7..558b2e3 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_82ff9d() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.fxc.hlsl
index 60243f7..558b2e3 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_82ff9d() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.glsl
index f1cc268..7eeff32 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_82ff9d() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_82ff9d() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_82ff9d() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.msl
index 43cd910..d82882e 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_82ff9d() {
-  int2 res = int2(1);
+  float2 res = float2(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.spvasm
index ad5dc10..71a0bed 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-         %20 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %18 = OpConstantNull %v2float
+         %19 = OpTypeFunction %v4float
  %abs_82ff9d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v2float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %abs_82ff9d
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %abs_82ff9d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_82ff9d
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_82ff9d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %abs_82ff9d
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %abs_82ff9d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.wgsl
index 9c13cc5..a1a3135 100644
--- a/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/82ff9d.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_82ff9d() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.0);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl
index 0d61fc3..b1fcb7b 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<4, ia>) -> vec<4, ia>
 fn abs_8ca9b1() {
-  const arg_0 = vec4(1.0);
+  const arg_0 = vec4(1);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.dxc.hlsl
index 254e652..ded6c62 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_8ca9b1() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.fxc.hlsl
index 254e652..ded6c62 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_8ca9b1() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.glsl
index 3e153f7..c3fce66 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_8ca9b1() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_8ca9b1() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_8ca9b1() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.msl
index 8dd66e4..4681936 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_8ca9b1() {
-  float4 res = float4(1.0f);
+  int4 res = int4(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.spvasm
index 967646f..447b039 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,35 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %19 = OpConstantNull %v4int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %17 = OpTypeFunction %v4float
  %abs_8ca9b1 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_v4int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %abs_8ca9b1
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_8ca9b1
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %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
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %abs_8ca9b1
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_8ca9b1
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %abs_8ca9b1
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_8ca9b1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.wgsl
index ef2c0e5..cd27664 100644
--- a/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/8ca9b1.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_8ca9b1() {
-  const arg_0 = vec4(1.0);
+  const arg_0 = vec4(1);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl b/test/tint/builtins/gen/var/abs/aedb6d.wgsl
index 1d61796..3d332c2 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(fa) -> fa
 fn abs_aedb6d() {
-  const arg_0 = 1;
+  const arg_0 = 1.;
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.dxc.hlsl
index c6333ed..1de84a5 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.fxc.hlsl
index c6333ed..1de84a5 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.glsl
index 8f21da4..a7d37b0 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.msl
index e27ed9f..3434978 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_aedb6d() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.spvasm
index f52b339..f41bcf1 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+         %16 = OpTypeFunction %v4float
  %abs_aedb6d = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %17
-               OpStore %res %int_1
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %float_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %abs_aedb6d
+%vertex_main_inner = OpFunction %v4float None %16
+         %18 = OpLabel
+         %19 = OpFunctionCall %void %abs_aedb6d
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %21 = OpLabel
+         %22 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %22
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_aedb6d
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %abs_aedb6d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_aedb6d
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %abs_aedb6d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.wgsl
index 7897c84..46f5e5b 100644
--- a/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/aedb6d.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_aedb6d() {
-  const arg_0 = 1;
+  const arg_0 = 1.0;
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl b/test/tint/builtins/gen/var/abs/c3321c.wgsl
index 9f99d2a..009e3aa 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl
+++ b/test/tint/builtins/gen/var/abs/c3321c.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<3, ia>) -> vec<3, ia>
 fn abs_c3321c() {
-  const arg_0 = vec3(1.0);
+  const arg_0 = vec3(1);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.dxc.hlsl
index d56d57a..0aa2ad9 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_c3321c() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.fxc.hlsl
index d56d57a..0aa2ad9 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_c3321c() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.glsl
index 6b1cea3..d9a6e95 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_c3321c() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_c3321c() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_c3321c() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.msl
index eed8424..ffdb7d7 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_c3321c() {
-  float3 res = float3(1.0f);
+  int3 res = int3(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.spvasm
index 92db6e9..c8fed58 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/c3321c.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %19 = OpConstantNull %v3int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-         %19 = OpTypeFunction %v4float
  %abs_c3321c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %abs_c3321c
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %abs_c3321c
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %abs_c3321c
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %abs_c3321c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %abs_c3321c
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %abs_c3321c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.wgsl
index 785d26f..1db0ff5 100644
--- a/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/c3321c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_c3321c() {
-  const arg_0 = vec3(1.0);
+  const arg_0 = vec3(1);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl b/test/tint/builtins/gen/var/abs/e28785.wgsl
index a3e43a4..23e125d 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl
@@ -23,7 +23,7 @@
 
 // fn abs(vec<4, fa>) -> vec<4, fa>
 fn abs_e28785() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.dxc.hlsl
index 0c83f68..46f6f3f 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void abs_e28785() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.fxc.hlsl
index 0c83f68..46f6f3f 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void abs_e28785() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.glsl b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.glsl
index ef86df6..4255eda 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void abs_e28785() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void abs_e28785() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void abs_e28785() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.msl b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.msl
index f88e571..3f089fb 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void abs_e28785() {
-  int4 res = int4(1);
+  float4 res = float4(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.spvasm b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.spvasm
index fb64961..556e68f 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,35 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %17 = OpTypeFunction %v4float
  %abs_e28785 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %abs_e28785
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %abs_e28785
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %abs_e28785
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %abs_e28785
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %abs_e28785
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %abs_e28785
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.wgsl b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.wgsl
index 8c07819..154d56f 100644
--- a/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/abs/e28785.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn abs_e28785() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.0);
   var res = abs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/16b543.wgsl b/test/tint/builtins/gen/var/asinh/16b543.wgsl
index 1d4a756..ba6c2b8 100644
--- a/test/tint/builtins/gen/var/asinh/16b543.wgsl
+++ b/test/tint/builtins/gen/var/asinh/16b543.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(vec<2, fa>) -> vec<2, fa>
 fn asinh_16b543() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.);
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/16b543.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/16b543.wgsl.expected.wgsl
index 36b92eb..79dc047 100644
--- a/test/tint/builtins/gen/var/asinh/16b543.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/16b543.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_16b543() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.0);
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/180015.wgsl b/test/tint/builtins/gen/var/asinh/180015.wgsl
index c08371d..ecb112b 100644
--- a/test/tint/builtins/gen/var/asinh/180015.wgsl
+++ b/test/tint/builtins/gen/var/asinh/180015.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(fa) -> fa
 fn asinh_180015() {
-  const arg_0 = 1;
+  const arg_0 = 1.;
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/180015.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/180015.wgsl.expected.wgsl
index b36912f..ba5f055 100644
--- a/test/tint/builtins/gen/var/asinh/180015.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/180015.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_180015() {
-  const arg_0 = 1;
+  const arg_0 = 1.0;
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/51079e.wgsl b/test/tint/builtins/gen/var/asinh/51079e.wgsl
index 8e0cd7d..3c55709 100644
--- a/test/tint/builtins/gen/var/asinh/51079e.wgsl
+++ b/test/tint/builtins/gen/var/asinh/51079e.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(vec<3, fa>) -> vec<3, fa>
 fn asinh_51079e() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.);
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/51079e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/51079e.wgsl.expected.wgsl
index 629e64b..d236a88 100644
--- a/test/tint/builtins/gen/var/asinh/51079e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/51079e.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_51079e() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.0);
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/cf8603.wgsl b/test/tint/builtins/gen/var/asinh/cf8603.wgsl
index 56b8992..bfdccd2 100644
--- a/test/tint/builtins/gen/var/asinh/cf8603.wgsl
+++ b/test/tint/builtins/gen/var/asinh/cf8603.wgsl
@@ -23,7 +23,7 @@
 
 // fn asinh(vec<4, fa>) -> vec<4, fa>
 fn asinh_cf8603() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.);
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/asinh/cf8603.wgsl.expected.wgsl b/test/tint/builtins/gen/var/asinh/cf8603.wgsl.expected.wgsl
index 52b7d59..ea60319 100644
--- a/test/tint/builtins/gen/var/asinh/cf8603.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/asinh/cf8603.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn asinh_cf8603() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.0);
   var res = asinh(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/5ca7b8.wgsl b/test/tint/builtins/gen/var/atan/5ca7b8.wgsl
index 8d7f504..10df7a2 100644
--- a/test/tint/builtins/gen/var/atan/5ca7b8.wgsl
+++ b/test/tint/builtins/gen/var/atan/5ca7b8.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(vec<2, fa>) -> vec<2, fa>
 fn atan_5ca7b8() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.);
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/5ca7b8.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/5ca7b8.wgsl.expected.wgsl
index b51805a..6d32e47 100644
--- a/test/tint/builtins/gen/var/atan/5ca7b8.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/5ca7b8.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_5ca7b8() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.0);
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/749e1b.wgsl b/test/tint/builtins/gen/var/atan/749e1b.wgsl
index 954592f..82d41fe 100644
--- a/test/tint/builtins/gen/var/atan/749e1b.wgsl
+++ b/test/tint/builtins/gen/var/atan/749e1b.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(vec<3, fa>) -> vec<3, fa>
 fn atan_749e1b() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.);
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/749e1b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/749e1b.wgsl.expected.wgsl
index 5dc2aff..ff1324a 100644
--- a/test/tint/builtins/gen/var/atan/749e1b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/749e1b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_749e1b() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.0);
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/7a2a75.wgsl b/test/tint/builtins/gen/var/atan/7a2a75.wgsl
index be5313d..4ec745c 100644
--- a/test/tint/builtins/gen/var/atan/7a2a75.wgsl
+++ b/test/tint/builtins/gen/var/atan/7a2a75.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(fa) -> fa
 fn atan_7a2a75() {
-  const arg_0 = 1;
+  const arg_0 = 1.;
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/7a2a75.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/7a2a75.wgsl.expected.wgsl
index b9b8159..807d75e 100644
--- a/test/tint/builtins/gen/var/atan/7a2a75.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/7a2a75.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_7a2a75() {
-  const arg_0 = 1;
+  const arg_0 = 1.0;
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/d17fb2.wgsl b/test/tint/builtins/gen/var/atan/d17fb2.wgsl
index ac898e3..4098f4f 100644
--- a/test/tint/builtins/gen/var/atan/d17fb2.wgsl
+++ b/test/tint/builtins/gen/var/atan/d17fb2.wgsl
@@ -23,7 +23,7 @@
 
 // fn atan(vec<4, fa>) -> vec<4, fa>
 fn atan_d17fb2() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.);
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan/d17fb2.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan/d17fb2.wgsl.expected.wgsl
index e625150..fcb93e6 100644
--- a/test/tint/builtins/gen/var/atan/d17fb2.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan/d17fb2.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn atan_d17fb2() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.0);
   var res = atan(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/034ace.wgsl b/test/tint/builtins/gen/var/atan2/034ace.wgsl
index e52cf68..0c6fdaa 100644
--- a/test/tint/builtins/gen/var/atan2/034ace.wgsl
+++ b/test/tint/builtins/gen/var/atan2/034ace.wgsl
@@ -23,8 +23,8 @@
 
 // fn atan2(fa, fa) -> fa
 fn atan2_034ace() {
-  const arg_0 = 1;
-  const arg_1 = 1;
+  const arg_0 = 1.;
+  const arg_1 = 1.;
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/034ace.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/034ace.wgsl.expected.wgsl
index 1de898d..b92f6fd 100644
--- a/test/tint/builtins/gen/var/atan2/034ace.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/034ace.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn atan2_034ace() {
-  const arg_0 = 1;
-  const arg_1 = 1;
+  const arg_0 = 1.0;
+  const arg_1 = 1.0;
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/3c2865.wgsl b/test/tint/builtins/gen/var/atan2/3c2865.wgsl
index 499e571..412205b 100644
--- a/test/tint/builtins/gen/var/atan2/3c2865.wgsl
+++ b/test/tint/builtins/gen/var/atan2/3c2865.wgsl
@@ -23,8 +23,8 @@
 
 // fn atan2(vec<3, fa>, vec<3, fa>) -> vec<3, fa>
 fn atan2_3c2865() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.);
+  const arg_1 = vec3(1.);
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/3c2865.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/3c2865.wgsl.expected.wgsl
index cb7b4c8..330079d 100644
--- a/test/tint/builtins/gen/var/atan2/3c2865.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/3c2865.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn atan2_3c2865() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.0);
+  const arg_1 = vec3(1.0);
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/c19683.wgsl b/test/tint/builtins/gen/var/atan2/c19683.wgsl
index 3e2522a..978154a 100644
--- a/test/tint/builtins/gen/var/atan2/c19683.wgsl
+++ b/test/tint/builtins/gen/var/atan2/c19683.wgsl
@@ -23,8 +23,8 @@
 
 // fn atan2(vec<2, fa>, vec<2, fa>) -> vec<2, fa>
 fn atan2_c19683() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.);
+  const arg_1 = vec2(1.);
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/c19683.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/c19683.wgsl.expected.wgsl
index bc8d8ee..97e4539 100644
--- a/test/tint/builtins/gen/var/atan2/c19683.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/c19683.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn atan2_c19683() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.0);
+  const arg_1 = vec2(1.0);
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/c4be45.wgsl b/test/tint/builtins/gen/var/atan2/c4be45.wgsl
index 761ecc8..446e1df 100644
--- a/test/tint/builtins/gen/var/atan2/c4be45.wgsl
+++ b/test/tint/builtins/gen/var/atan2/c4be45.wgsl
@@ -23,8 +23,8 @@
 
 // fn atan2(vec<4, fa>, vec<4, fa>) -> vec<4, fa>
 fn atan2_c4be45() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.);
+  const arg_1 = vec4(1.);
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/atan2/c4be45.wgsl.expected.wgsl b/test/tint/builtins/gen/var/atan2/c4be45.wgsl.expected.wgsl
index f6d2ed6..16e806e 100644
--- a/test/tint/builtins/gen/var/atan2/c4be45.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/atan2/c4be45.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn atan2_c4be45() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.0);
+  const arg_1 = vec4(1.0);
   var res = atan2(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl b/test/tint/builtins/gen/var/clamp/177548.wgsl
index 8a92059..3b17a48 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl
+++ b/test/tint/builtins/gen/var/clamp/177548.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(vec<2, ia>, vec<2, ia>, vec<2, ia>) -> vec<2, ia>
 fn clamp_177548() {
-  const arg_0 = vec2(1.0);
-  const arg_1 = vec2(1.0);
-  const arg_2 = vec2(1.0);
+  const arg_0 = vec2(1);
+  const arg_1 = vec2(1);
+  const arg_2 = vec2(1);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.dxc.hlsl
index e6db476..0706d74 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_177548() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.fxc.hlsl
index e6db476..0706d74 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_177548() {
-  float2 res = (1.0f).xx;
+  int2 res = (1).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.glsl
index aef0c70..cc6d48a 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_177548() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_177548() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_177548() {
-  vec2 res = vec2(1.0f);
+  ivec2 res = ivec2(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.msl
index 7c91b67..25d698d 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_177548() {
-  float2 res = float2(1.0f);
+  int2 res = int2(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.spvasm
index 2b2e5dc..2a9b2c6 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/177548.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %19 = OpConstantNull %v2int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
-         %19 = OpTypeFunction %v4float
 %clamp_177548 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v2int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %clamp_177548
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_177548
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_177548
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_177548
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_177548
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_177548
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.wgsl
index 0562596..cde8a1f 100644
--- a/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/177548.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_177548() {
-  const arg_0 = vec2(1.0);
-  const arg_1 = vec2(1.0);
-  const arg_2 = vec2(1.0);
+  const arg_0 = vec2(1);
+  const arg_1 = vec2(1);
+  const arg_2 = vec2(1);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl
index fee18f2..05f4aec 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(fa, fa, fa) -> fa
 fn clamp_23aa4f() {
-  const arg_0 = 1;
-  const arg_1 = 1;
-  const arg_2 = 1;
+  const arg_0 = 1.;
+  const arg_1 = 1.;
+  const arg_2 = 1.;
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.dxc.hlsl
index 95967c6..7b0cd06 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.fxc.hlsl
index 95967c6..7b0cd06 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.glsl
index 745c8d9..cf8f34c 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.msl
index e6b476f..29d1fc6 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_23aa4f() {
-  int res = 1;
+  float res = 1.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.spvasm
index 9e7f69b..7a5bccc 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %17 = OpConstantNull %int
-         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+         %16 = OpTypeFunction %v4float
 %clamp_23aa4f = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_int Function %17
-               OpStore %res %int_1
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %float_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %clamp_23aa4f
+%vertex_main_inner = OpFunction %v4float None %16
+         %18 = OpLabel
+         %19 = OpFunctionCall %void %clamp_23aa4f
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %21 = OpLabel
+         %22 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %22
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_23aa4f
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %clamp_23aa4f
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_23aa4f
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_23aa4f
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.wgsl
index 4024be1..b4d1ab6 100644
--- a/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/23aa4f.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_23aa4f() {
-  const arg_0 = 1;
-  const arg_1 = 1;
-  const arg_2 = 1;
+  const arg_0 = 1.0;
+  const arg_1 = 1.0;
+  const arg_2 = 1.0;
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl b/test/tint/builtins/gen/var/clamp/5cf700.wgsl
index d39f709..d3bca4f 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(vec<3, fa>, vec<3, fa>, vec<3, fa>) -> vec<3, fa>
 fn clamp_5cf700() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
-  const arg_2 = vec3(1);
+  const arg_0 = vec3(1.);
+  const arg_1 = vec3(1.);
+  const arg_2 = vec3(1.);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.dxc.hlsl
index 06d6121..ecb46df 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_5cf700() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.fxc.hlsl
index 06d6121..ecb46df 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_5cf700() {
-  int3 res = (1).xxx;
+  float3 res = (1.0f).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.glsl
index a1ce575..2cd1427 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_5cf700() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_5cf700() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_5cf700() {
-  ivec3 res = ivec3(1);
+  vec3 res = vec3(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.msl
index 55c384c..ca116af 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_5cf700() {
-  int3 res = int3(1);
+  float3 res = float3(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.spvasm
index 3b26aca..4414636 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %19 = OpConstantNull %v3int
-         %20 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %18 = OpConstantNull %v3float
+         %19 = OpTypeFunction %v4float
 %clamp_5cf700 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v3float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %clamp_5cf700
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %clamp_5cf700
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_5cf700
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_5cf700
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %clamp_5cf700
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_5cf700
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.wgsl
index d0f4e50..0ab0a51 100644
--- a/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/5cf700.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_5cf700() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
-  const arg_2 = vec3(1);
+  const arg_0 = vec3(1.0);
+  const arg_1 = vec3(1.0);
+  const arg_2 = vec3(1.0);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl b/test/tint/builtins/gen/var/clamp/87df46.wgsl
index 8b27e0f..ea8e101 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(vec<4, fa>, vec<4, fa>, vec<4, fa>) -> vec<4, fa>
 fn clamp_87df46() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
-  const arg_2 = vec4(1);
+  const arg_0 = vec4(1.);
+  const arg_1 = vec4(1.);
+  const arg_2 = vec4(1.);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.dxc.hlsl
index 8af196a..f9670d0 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_87df46() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.fxc.hlsl
index 8af196a..f9670d0 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_87df46() {
-  int4 res = (1).xxxx;
+  float4 res = (1.0f).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.glsl
index b3db98f..1d592a4 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_87df46() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_87df46() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_87df46() {
-  ivec4 res = ivec4(1);
+  vec4 res = vec4(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.msl
index 62aa4bb..54934f7 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_87df46() {
-  int4 res = int4(1);
+  float4 res = float4(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.spvasm
index 0e03650..3273991 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 30
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,35 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %19 = OpConstantNull %v4int
-         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %17 = OpTypeFunction %v4float
 %clamp_87df46 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v4float Function %5
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %clamp_87df46
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %clamp_87df46
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_87df46
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %clamp_87df46
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %clamp_87df46
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %clamp_87df46
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.wgsl
index ae5d00e..3b266d2 100644
--- a/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/87df46.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_87df46() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
-  const arg_2 = vec4(1);
+  const arg_0 = vec4(1.0);
+  const arg_1 = vec4(1.0);
+  const arg_2 = vec4(1.0);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl
index 6ffecf3..307f986 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(vec<3, ia>, vec<3, ia>, vec<3, ia>) -> vec<3, ia>
 fn clamp_8b1eaa() {
-  const arg_0 = vec3(1.0);
-  const arg_1 = vec3(1.0);
-  const arg_2 = vec3(1.0);
+  const arg_0 = vec3(1);
+  const arg_1 = vec3(1);
+  const arg_2 = vec3(1);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.dxc.hlsl
index 8270dd1..9ffb0cb 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_8b1eaa() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.fxc.hlsl
index 8270dd1..9ffb0cb 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_8b1eaa() {
-  float3 res = (1.0f).xxx;
+  int3 res = (1).xxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.glsl
index 6729165..12ccf0f 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_8b1eaa() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_8b1eaa() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_8b1eaa() {
-  vec3 res = vec3(1.0f);
+  ivec3 res = ivec3(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.msl
index 786aaaa..fb40ee7 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_8b1eaa() {
-  float3 res = float3(1.0f);
+  int3 res = int3(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.spvasm
index faa36f5..37134e6 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.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
                OpMemoryModel Logical GLSL450
@@ -30,37 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %19 = OpConstantNull %v3int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
-         %19 = OpTypeFunction %v4float
 %clamp_8b1eaa = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v3float Function %18
-               OpStore %res %15
+        %res = OpVariable %_ptr_Function_v3int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %clamp_8b1eaa
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_8b1eaa
                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
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_8b1eaa
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_8b1eaa
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %clamp_8b1eaa
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_8b1eaa
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.wgsl
index f61ad35..fa4b2c8 100644
--- a/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/8b1eaa.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_8b1eaa() {
-  const arg_0 = vec3(1.0);
-  const arg_1 = vec3(1.0);
-  const arg_2 = vec3(1.0);
+  const arg_0 = vec3(1);
+  const arg_1 = vec3(1);
+  const arg_2 = vec3(1);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl b/test/tint/builtins/gen/var/clamp/96e56a.wgsl
index e53292c..67ff631 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(ia, ia, ia) -> ia
 fn clamp_96e56a() {
-  const arg_0 = 1.0;
-  const arg_1 = 1.0;
-  const arg_2 = 1.0;
+  const arg_0 = 1;
+  const arg_1 = 1;
+  const arg_2 = 1;
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.dxc.hlsl
index 6231928..b445f25 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.fxc.hlsl
index 6231928..b445f25 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.glsl
index c7dbb9b..cf52b93 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.msl
index a28781c..46325a2 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_96e56a() {
-  float res = 1.0f;
+  int res = 1;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.spvasm
index 07544da..0097629 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 29
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,34 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %17 = OpConstantNull %int
+         %18 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%_ptr_Function_float = OpTypePointer Function %float
-         %16 = OpTypeFunction %v4float
 %clamp_96e56a = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %res %float_1
+        %res = OpVariable %_ptr_Function_int Function %17
+               OpStore %res %int_1
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %16
-         %18 = OpLabel
-         %19 = OpFunctionCall %void %clamp_96e56a
+%vertex_main_inner = OpFunction %v4float None %18
+         %20 = OpLabel
+         %21 = OpFunctionCall %void %clamp_96e56a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %21 = OpLabel
-         %22 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %22
+         %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
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %clamp_96e56a
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_96e56a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %clamp_96e56a
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_96e56a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.wgsl
index d6007ca..d2ee695 100644
--- a/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/96e56a.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_96e56a() {
-  const arg_0 = 1.0;
-  const arg_1 = 1.0;
-  const arg_2 = 1.0;
+  const arg_0 = 1;
+  const arg_1 = 1;
+  const arg_2 = 1;
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl b/test/tint/builtins/gen/var/clamp/9d731c.wgsl
index c86c268..e83bb0f 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(vec<2, fa>, vec<2, fa>, vec<2, fa>) -> vec<2, fa>
 fn clamp_9d731c() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
-  const arg_2 = vec2(1);
+  const arg_0 = vec2(1.);
+  const arg_1 = vec2(1.);
+  const arg_2 = vec2(1.);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.dxc.hlsl
index 25efa1a..b14e434 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_9d731c() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.fxc.hlsl
index 25efa1a..b14e434 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_9d731c() {
-  int2 res = (1).xx;
+  float2 res = (1.0f).xx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.glsl
index 8f283b5..554727e 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_9d731c() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_9d731c() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_9d731c() {
-  ivec2 res = ivec2(1);
+  vec2 res = vec2(1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.msl
index 5a78c71..3ac366f 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_9d731c() {
-  int2 res = int2(1);
+  float2 res = float2(1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.spvasm
index 533a9b0..57bec99 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 32
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,39 +30,37 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %16 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %19 = OpConstantNull %v2int
-         %20 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %15 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %18 = OpConstantNull %v2float
+         %19 = OpTypeFunction %v4float
 %clamp_9d731c = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v2int Function %19
-               OpStore %res %16
+        %res = OpVariable %_ptr_Function_v2float Function %18
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %clamp_9d731c
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %clamp_9d731c
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %clamp_9d731c
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %clamp_9d731c
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %clamp_9d731c
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %clamp_9d731c
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.wgsl
index 54adf9a..a1ccea1 100644
--- a/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/9d731c.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_9d731c() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
-  const arg_2 = vec2(1);
+  const arg_0 = vec2(1.0);
+  const arg_1 = vec2(1.0);
+  const arg_2 = vec2(1.0);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl b/test/tint/builtins/gen/var/clamp/d396af.wgsl
index 6c43a0c..bb8b586 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl
@@ -23,9 +23,9 @@
 
 // fn clamp(vec<4, ia>, vec<4, ia>, vec<4, ia>) -> vec<4, ia>
 fn clamp_d396af() {
-  const arg_0 = vec4(1.0);
-  const arg_1 = vec4(1.0);
-  const arg_2 = vec4(1.0);
+  const arg_0 = vec4(1);
+  const arg_1 = vec4(1);
+  const arg_2 = vec4(1);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.dxc.hlsl
index 1f04061..bb6559a 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_d396af() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.fxc.hlsl
index 1f04061..bb6559a 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void clamp_d396af() {
-  float4 res = (1.0f).xxxx;
+  int4 res = (1).xxxx;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.glsl b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.glsl
index 57aa017..7c41a2f 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void clamp_d396af() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void clamp_d396af() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void clamp_d396af() {
-  vec4 res = vec4(1.0f);
+  ivec4 res = ivec4(1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.msl b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.msl
index 3a1316e..1020d60 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void clamp_d396af() {
-  float4 res = float4(1.0f);
+  int4 res = int4(1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.spvasm b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.spvasm
index 4403ee44..382a87f 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 30
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -30,35 +30,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %16 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %19 = OpConstantNull %v4int
+         %20 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %17 = OpTypeFunction %v4float
 %clamp_d396af = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_v4float Function %5
-               OpStore %res %14
+        %res = OpVariable %_ptr_Function_v4int Function %19
+               OpStore %res %16
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %17
-         %19 = OpLabel
-         %20 = OpFunctionCall %void %clamp_d396af
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %clamp_d396af
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %22 = OpLabel
-         %23 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %23
+         %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
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %clamp_d396af
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %clamp_d396af
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %clamp_d396af
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %clamp_d396af
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.wgsl b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.wgsl
index fd665f6..ca4ce5a 100644
--- a/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/clamp/d396af.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 fn clamp_d396af() {
-  const arg_0 = vec4(1.0);
-  const arg_1 = vec4(1.0);
-  const arg_2 = vec4(1.0);
+  const arg_0 = vec4(1);
+  const arg_1 = vec4(1);
+  const arg_2 = vec4(1);
   var res = clamp(arg_0, arg_1, arg_2);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl b/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl
index ceb9904..ef05a7f 100644
--- a/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl
+++ b/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(vec<4, fa>) -> vec<4, fa>
 fn saturate_4ed8d7() {
-  const arg_0 = vec4(2);
+  const arg_0 = vec4(2.);
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl.expected.wgsl
index c5f28e8..fd087d5 100644
--- a/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/4ed8d7.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_4ed8d7() {
-  const arg_0 = vec4(2);
+  const arg_0 = vec4(2.0);
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/78b37c.wgsl b/test/tint/builtins/gen/var/saturate/78b37c.wgsl
index ab9e117..220f0f9 100644
--- a/test/tint/builtins/gen/var/saturate/78b37c.wgsl
+++ b/test/tint/builtins/gen/var/saturate/78b37c.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(fa) -> fa
 fn saturate_78b37c() {
-  const arg_0 = 2;
+  const arg_0 = 2.;
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/78b37c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/78b37c.wgsl.expected.wgsl
index a12f95e..868869a 100644
--- a/test/tint/builtins/gen/var/saturate/78b37c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/78b37c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_78b37c() {
-  const arg_0 = 2;
+  const arg_0 = 2.0;
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/d55822.wgsl b/test/tint/builtins/gen/var/saturate/d55822.wgsl
index 2a419d4..8cdc1f3 100644
--- a/test/tint/builtins/gen/var/saturate/d55822.wgsl
+++ b/test/tint/builtins/gen/var/saturate/d55822.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(vec<3, fa>) -> vec<3, fa>
 fn saturate_d55822() {
-  const arg_0 = vec3(2);
+  const arg_0 = vec3(2.);
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/d55822.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/d55822.wgsl.expected.wgsl
index ba4c878..9adb651 100644
--- a/test/tint/builtins/gen/var/saturate/d55822.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/d55822.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_d55822() {
-  const arg_0 = vec3(2);
+  const arg_0 = vec3(2.0);
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e40fb6.wgsl b/test/tint/builtins/gen/var/saturate/e40fb6.wgsl
index a0e9e91..cdea5fa 100644
--- a/test/tint/builtins/gen/var/saturate/e40fb6.wgsl
+++ b/test/tint/builtins/gen/var/saturate/e40fb6.wgsl
@@ -23,7 +23,7 @@
 
 // fn saturate(vec<2, fa>) -> vec<2, fa>
 fn saturate_e40fb6() {
-  const arg_0 = vec2(2);
+  const arg_0 = vec2(2.);
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/saturate/e40fb6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/saturate/e40fb6.wgsl.expected.wgsl
index 2cf5cdd..0c8eb99 100644
--- a/test/tint/builtins/gen/var/saturate/e40fb6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/saturate/e40fb6.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn saturate_e40fb6() {
-  const arg_0 = vec2(2);
+  const arg_0 = vec2(2.0);
   var res = saturate(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl b/test/tint/builtins/gen/var/select/089657.wgsl
index eaed4bb..f448bc9 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl
+++ b/test/tint/builtins/gen/var/select/089657.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<3, fa>, vec<3, fa>, bool) -> vec<3, fa>
 fn select_089657() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.);
+  const arg_1 = vec3(1.);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/089657.wgsl.expected.dxc.hlsl
index dca35c7..9738da9 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/089657.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_089657() {
   bool arg_2 = true;
-  int3 res = (arg_2 ? (1).xxx : (1).xxx);
+  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/089657.wgsl.expected.fxc.hlsl
index dca35c7..9738da9 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/089657.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_089657() {
   bool arg_2 = true;
-  int3 res = (arg_2 ? (1).xxx : (1).xxx);
+  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/089657.wgsl.expected.glsl
index d709ba9..93734b1 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/089657.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_089657() {
   bool arg_2 = true;
-  ivec3 res = (arg_2 ? ivec3(1) : ivec3(1));
+  vec3 res = (arg_2 ? vec3(1.0f) : vec3(1.0f));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_089657() {
   bool arg_2 = true;
-  ivec3 res = (arg_2 ? ivec3(1) : ivec3(1));
+  vec3 res = (arg_2 ? vec3(1.0f) : vec3(1.0f));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_089657() {
   bool arg_2 = true;
-  ivec3 res = (arg_2 ? ivec3(1) : ivec3(1));
+  vec3 res = (arg_2 ? vec3(1.0f) : vec3(1.0f));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl.expected.msl b/test/tint/builtins/gen/var/select/089657.wgsl.expected.msl
index 1d68da0..2780420 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/089657.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_089657() {
   bool arg_2 = true;
-  int3 res = select(int3(1), int3(1), arg_2);
+  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/089657.wgsl.expected.spvasm
index 2881e76..df900bc 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/089657.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,48 +35,46 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+    %v3float = OpTypeVector %float 3
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v3float %float_1 %float_1 %float_1
      %v3bool = OpTypeVector %bool 3
 %_ptr_Function_v3bool = OpTypePointer Function %v3bool
-         %27 = OpConstantNull %v3bool
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %31 = OpConstantNull %v3int
-         %32 = OpTypeFunction %v4float
-    %float_1 = OpConstant %float 1
+         %26 = OpConstantNull %v3bool
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %30 = OpConstantNull %v3float
+         %31 = OpTypeFunction %v4float
 %select_089657 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-         %25 = OpVariable %_ptr_Function_v3bool Function %27
-        %res = OpVariable %_ptr_Function_v3int Function %31
+         %24 = OpVariable %_ptr_Function_v3bool Function %26
+        %res = OpVariable %_ptr_Function_v3float Function %30
                OpStore %arg_2 %true
-         %21 = OpLoad %bool %arg_2
-         %28 = OpCompositeConstruct %v3bool %21 %21 %21
-         %18 = OpSelect %v3int %28 %23 %23
+         %20 = OpLoad %bool %arg_2
+         %27 = OpCompositeConstruct %v3bool %20 %20 %20
+         %18 = OpSelect %v3float %27 %22 %22
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %select_089657
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %select_089657
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %38
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %select_089657
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %select_089657
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %select_089657
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %select_089657
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/089657.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/089657.wgsl.expected.wgsl
index 7ec7b03..c7572f6 100644
--- a/test/tint/builtins/gen/var/select/089657.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/089657.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_089657() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.0);
+  const arg_1 = vec3(1.0);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl b/test/tint/builtins/gen/var/select/17441a.wgsl
index 2adbd67..7d12e4b 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<4, fa>, vec<4, fa>, bool) -> vec<4, fa>
 fn select_17441a() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.);
+  const arg_1 = vec4(1.);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.dxc.hlsl
index e56a262..830b6fb 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_17441a() {
   bool arg_2 = true;
-  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
+  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.fxc.hlsl
index e56a262..830b6fb 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_17441a() {
   bool arg_2 = true;
-  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
+  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.glsl
index 191bcf1..668d57d 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_17441a() {
   bool arg_2 = true;
-  ivec4 res = (arg_2 ? ivec4(1) : ivec4(1));
+  vec4 res = (arg_2 ? vec4(1.0f) : vec4(1.0f));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_17441a() {
   bool arg_2 = true;
-  ivec4 res = (arg_2 ? ivec4(1) : ivec4(1));
+  vec4 res = (arg_2 ? vec4(1.0f) : vec4(1.0f));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_17441a() {
   bool arg_2 = true;
-  ivec4 res = (arg_2 ? ivec4(1) : ivec4(1));
+  vec4 res = (arg_2 ? vec4(1.0f) : vec4(1.0f));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.msl b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.msl
index 85d2e41..6cde3fe 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_17441a() {
   bool arg_2 = true;
-  int4 res = select(int4(1), int4(1), arg_2);
+  float4 res = select(float4(1.0f), float4(1.0f), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.spvasm
index 4a544b3..95155c2 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 42
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,48 +35,44 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+    %float_1 = OpConstant %float 1
+         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
      %v4bool = OpTypeVector %bool 4
 %_ptr_Function_v4bool = OpTypePointer Function %v4bool
-         %27 = OpConstantNull %v4bool
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %31 = OpConstantNull %v4int
-         %32 = OpTypeFunction %v4float
-    %float_1 = OpConstant %float 1
+         %25 = OpConstantNull %v4bool
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %29 = OpTypeFunction %v4float
 %select_17441a = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-         %25 = OpVariable %_ptr_Function_v4bool Function %27
-        %res = OpVariable %_ptr_Function_v4int Function %31
+         %23 = OpVariable %_ptr_Function_v4bool Function %25
+        %res = OpVariable %_ptr_Function_v4float Function %5
                OpStore %arg_2 %true
-         %21 = OpLoad %bool %arg_2
-         %28 = OpCompositeConstruct %v4bool %21 %21 %21 %21
-         %18 = OpSelect %v4int %28 %23 %23
+         %19 = OpLoad %bool %arg_2
+         %26 = OpCompositeConstruct %v4bool %19 %19 %19 %19
+         %18 = OpSelect %v4float %26 %21 %21
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %select_17441a
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %select_17441a
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %38
+         %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
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %select_17441a
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %select_17441a
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %select_17441a
+         %40 = OpLabel
+         %41 = OpFunctionCall %void %select_17441a
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.wgsl
index f179566..e7cc228 100644
--- a/test/tint/builtins/gen/var/select/17441a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/17441a.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_17441a() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.0);
+  const arg_1 = vec4(1.0);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl b/test/tint/builtins/gen/var/select/1f4d93.wgsl
index 9a73d9c..d7f016c 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<2, fa>, vec<2, fa>, vec<2, bool>) -> vec<2, fa>
 fn select_1f4d93() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.);
+  const arg_1 = vec2(1.);
   var arg_2 = vec2<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.dxc.hlsl
index af542e3..df4ffcf 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_1f4d93() {
   bool2 arg_2 = (true).xx;
-  int2 res = (arg_2 ? (1).xx : (1).xx);
+  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.fxc.hlsl
index af542e3..df4ffcf 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_1f4d93() {
   bool2 arg_2 = (true).xx;
-  int2 res = (arg_2 ? (1).xx : (1).xx);
+  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.glsl
index 0b2931a..406d203 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_1f4d93() {
   bvec2 arg_2 = bvec2(true);
-  ivec2 res = mix(ivec2(1), ivec2(1), arg_2);
+  vec2 res = mix(vec2(1.0f), vec2(1.0f), arg_2);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_1f4d93() {
   bvec2 arg_2 = bvec2(true);
-  ivec2 res = mix(ivec2(1), ivec2(1), arg_2);
+  vec2 res = mix(vec2(1.0f), vec2(1.0f), arg_2);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_1f4d93() {
   bvec2 arg_2 = bvec2(true);
-  ivec2 res = mix(ivec2(1), ivec2(1), arg_2);
+  vec2 res = mix(vec2(1.0f), vec2(1.0f), arg_2);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.msl b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.msl
index 136969e..ee74234 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_1f4d93() {
   bool2 arg_2 = bool2(true);
-  int2 res = select(int2(1), int2(1), arg_2);
+  float2 res = select(float2(1.0f), float2(1.0f), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.spvasm
index d121d9d..7444027 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,43 +37,41 @@
          %16 = OpConstantComposite %v2bool %true %true
 %_ptr_Function_v2bool = OpTypePointer Function %v2bool
          %19 = OpConstantNull %v2bool
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %25 = OpConstantComposite %v2int %int_1 %int_1
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %28 = OpConstantNull %v2int
-         %29 = OpTypeFunction %v4float
+    %v2float = OpTypeVector %float 2
     %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v2float %float_1 %float_1
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %27 = OpConstantNull %v2float
+         %28 = OpTypeFunction %v4float
 %select_1f4d93 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_v2bool Function %19
-        %res = OpVariable %_ptr_Function_v2int Function %28
+        %res = OpVariable %_ptr_Function_v2float Function %27
                OpStore %arg_2 %16
-         %23 = OpLoad %v2bool %arg_2
-         %20 = OpSelect %v2int %23 %25 %25
+         %22 = OpLoad %v2bool %arg_2
+         %20 = OpSelect %v2float %22 %24 %24
                OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %select_1f4d93
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_1f4d93
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %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
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %select_1f4d93
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %select_1f4d93
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %select_1f4d93
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %select_1f4d93
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.wgsl
index eae4ad4..32a1de2 100644
--- a/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/1f4d93.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_1f4d93() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.0);
+  const arg_1 = vec2(1.0);
   var arg_2 = vec2<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl b/test/tint/builtins/gen/var/select/2c96d4.wgsl
index 11cd234..250d84d 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<3, fa>, vec<3, fa>, vec<3, bool>) -> vec<3, fa>
 fn select_2c96d4() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.);
+  const arg_1 = vec3(1.);
   var arg_2 = vec3<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.dxc.hlsl
index 1fefd41..19253f3 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_2c96d4() {
   bool3 arg_2 = (true).xxx;
-  int3 res = (arg_2 ? (1).xxx : (1).xxx);
+  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.fxc.hlsl
index 1fefd41..19253f3 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_2c96d4() {
   bool3 arg_2 = (true).xxx;
-  int3 res = (arg_2 ? (1).xxx : (1).xxx);
+  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.glsl
index fb362d1..12eb956 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_2c96d4() {
   bvec3 arg_2 = bvec3(true);
-  ivec3 res = mix(ivec3(1), ivec3(1), arg_2);
+  vec3 res = mix(vec3(1.0f), vec3(1.0f), arg_2);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_2c96d4() {
   bvec3 arg_2 = bvec3(true);
-  ivec3 res = mix(ivec3(1), ivec3(1), arg_2);
+  vec3 res = mix(vec3(1.0f), vec3(1.0f), arg_2);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_2c96d4() {
   bvec3 arg_2 = bvec3(true);
-  ivec3 res = mix(ivec3(1), ivec3(1), arg_2);
+  vec3 res = mix(vec3(1.0f), vec3(1.0f), arg_2);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.msl b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.msl
index d174ca7..8ea9841 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_2c96d4() {
   bool3 arg_2 = bool3(true);
-  int3 res = select(int3(1), int3(1), arg_2);
+  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.spvasm
index 4e3846b..3c118fa 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 41
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,43 +37,41 @@
          %16 = OpConstantComposite %v3bool %true %true %true
 %_ptr_Function_v3bool = OpTypePointer Function %v3bool
          %19 = OpConstantNull %v3bool
-        %int = OpTypeInt 32 1
-      %v3int = OpTypeVector %int 3
-      %int_1 = OpConstant %int 1
-         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
-%_ptr_Function_v3int = OpTypePointer Function %v3int
-         %28 = OpConstantNull %v3int
-         %29 = OpTypeFunction %v4float
+    %v3float = OpTypeVector %float 3
     %float_1 = OpConstant %float 1
+         %24 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+%_ptr_Function_v3float = OpTypePointer Function %v3float
+         %27 = OpConstantNull %v3float
+         %28 = OpTypeFunction %v4float
 %select_2c96d4 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_v3bool Function %19
-        %res = OpVariable %_ptr_Function_v3int Function %28
+        %res = OpVariable %_ptr_Function_v3float Function %27
                OpStore %arg_2 %16
-         %23 = OpLoad %v3bool %arg_2
-         %20 = OpSelect %v3int %23 %25 %25
+         %22 = OpLoad %v3bool %arg_2
+         %20 = OpSelect %v3float %22 %24 %24
                OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %select_2c96d4
+%vertex_main_inner = OpFunction %v4float None %28
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %select_2c96d4
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %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
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %select_2c96d4
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %select_2c96d4
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %select_2c96d4
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %select_2c96d4
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.wgsl
index 35bf310..7142e9d 100644
--- a/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/2c96d4.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_2c96d4() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.0);
+  const arg_1 = vec3(1.0);
   var arg_2 = vec3<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl b/test/tint/builtins/gen/var/select/3a14be.wgsl
index 1b017cc..cbe494f 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<2, ia>, vec<2, ia>, bool) -> vec<2, ia>
 fn select_3a14be() {
-  const arg_0 = vec2(1.0);
-  const arg_1 = vec2(1.0);
+  const arg_0 = vec2(1);
+  const arg_1 = vec2(1);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.dxc.hlsl
index a44dede..7ff71ef 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_3a14be() {
   bool arg_2 = true;
-  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
+  int2 res = (arg_2 ? (1).xx : (1).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.fxc.hlsl
index a44dede..7ff71ef 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_3a14be() {
   bool arg_2 = true;
-  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
+  int2 res = (arg_2 ? (1).xx : (1).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.glsl
index 95525f9..ce3844b 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_3a14be() {
   bool arg_2 = true;
-  vec2 res = (arg_2 ? vec2(1.0f) : vec2(1.0f));
+  ivec2 res = (arg_2 ? ivec2(1) : ivec2(1));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_3a14be() {
   bool arg_2 = true;
-  vec2 res = (arg_2 ? vec2(1.0f) : vec2(1.0f));
+  ivec2 res = (arg_2 ? ivec2(1) : ivec2(1));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_3a14be() {
   bool arg_2 = true;
-  vec2 res = (arg_2 ? vec2(1.0f) : vec2(1.0f));
+  ivec2 res = (arg_2 ? ivec2(1) : ivec2(1));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.msl b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.msl
index e420d52..bccc77d 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_3a14be() {
   bool arg_2 = true;
-  float2 res = select(float2(1.0f), float2(1.0f), arg_2);
+  int2 res = select(int2(1), int2(1), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.spvasm
index 1338ae9..678d56b 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,46 +35,48 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v2float %float_1 %float_1
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v2int %int_1 %int_1
      %v2bool = OpTypeVector %bool 2
 %_ptr_Function_v2bool = OpTypePointer Function %v2bool
-         %26 = OpConstantNull %v2bool
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %30 = OpConstantNull %v2float
-         %31 = OpTypeFunction %v4float
+         %27 = OpConstantNull %v2bool
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %31 = OpConstantNull %v2int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %select_3a14be = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-         %24 = OpVariable %_ptr_Function_v2bool Function %26
-        %res = OpVariable %_ptr_Function_v2float Function %30
+         %25 = OpVariable %_ptr_Function_v2bool Function %27
+        %res = OpVariable %_ptr_Function_v2int Function %31
                OpStore %arg_2 %true
-         %20 = OpLoad %bool %arg_2
-         %27 = OpCompositeConstruct %v2bool %20 %20
-         %18 = OpSelect %v2float %27 %22 %22
+         %21 = OpLoad %bool %arg_2
+         %28 = OpCompositeConstruct %v2bool %21 %21
+         %18 = OpSelect %v2int %28 %23 %23
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %select_3a14be
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %select_3a14be
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %37
+         %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 %select_3a14be
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_3a14be
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %select_3a14be
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %select_3a14be
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.wgsl
index e44f5de..72035b4 100644
--- a/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/3a14be.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_3a14be() {
-  const arg_0 = vec2(1.0);
-  const arg_1 = vec2(1.0);
+  const arg_0 = vec2(1);
+  const arg_1 = vec2(1);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl b/test/tint/builtins/gen/var/select/431dfb.wgsl
index bf31b88..2921fe7 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<2, ia>, vec<2, ia>, vec<2, bool>) -> vec<2, ia>
 fn select_431dfb() {
-  const arg_0 = vec2(1.0);
-  const arg_1 = vec2(1.0);
+  const arg_0 = vec2(1);
+  const arg_1 = vec2(1);
   var arg_2 = vec2<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.dxc.hlsl
index f336ee1..1996b36 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_431dfb() {
   bool2 arg_2 = (true).xx;
-  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
+  int2 res = (arg_2 ? (1).xx : (1).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.fxc.hlsl
index f336ee1..1996b36 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_431dfb() {
   bool2 arg_2 = (true).xx;
-  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
+  int2 res = (arg_2 ? (1).xx : (1).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.glsl
index 65cbd4a..2809a08 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_431dfb() {
   bvec2 arg_2 = bvec2(true);
-  vec2 res = mix(vec2(1.0f), vec2(1.0f), arg_2);
+  ivec2 res = mix(ivec2(1), ivec2(1), arg_2);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_431dfb() {
   bvec2 arg_2 = bvec2(true);
-  vec2 res = mix(vec2(1.0f), vec2(1.0f), arg_2);
+  ivec2 res = mix(ivec2(1), ivec2(1), arg_2);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_431dfb() {
   bvec2 arg_2 = bvec2(true);
-  vec2 res = mix(vec2(1.0f), vec2(1.0f), arg_2);
+  ivec2 res = mix(ivec2(1), ivec2(1), arg_2);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.msl b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.msl
index 55cb0e2..9aaec19 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_431dfb() {
   bool2 arg_2 = bool2(true);
-  float2 res = select(float2(1.0f), float2(1.0f), arg_2);
+  int2 res = select(int2(1), int2(1), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.spvasm
index 2f3584e..749c226 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,41 +37,43 @@
          %16 = OpConstantComposite %v2bool %true %true
 %_ptr_Function_v2bool = OpTypePointer Function %v2bool
          %19 = OpConstantNull %v2bool
-    %v2float = OpTypeVector %float 2
+        %int = OpTypeInt 32 1
+      %v2int = OpTypeVector %int 2
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v2int %int_1 %int_1
+%_ptr_Function_v2int = OpTypePointer Function %v2int
+         %28 = OpConstantNull %v2int
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %24 = OpConstantComposite %v2float %float_1 %float_1
-%_ptr_Function_v2float = OpTypePointer Function %v2float
-         %27 = OpConstantNull %v2float
-         %28 = OpTypeFunction %v4float
 %select_431dfb = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_v2bool Function %19
-        %res = OpVariable %_ptr_Function_v2float Function %27
+        %res = OpVariable %_ptr_Function_v2int Function %28
                OpStore %arg_2 %16
-         %22 = OpLoad %v2bool %arg_2
-         %20 = OpSelect %v2float %22 %24 %24
+         %23 = OpLoad %v2bool %arg_2
+         %20 = OpSelect %v2int %23 %25 %25
                OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %28
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_431dfb
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %select_431dfb
                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
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %select_431dfb
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_431dfb
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %select_431dfb
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_431dfb
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.wgsl
index f39ed44..beb2288 100644
--- a/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/431dfb.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_431dfb() {
-  const arg_0 = vec2(1.0);
-  const arg_1 = vec2(1.0);
+  const arg_0 = vec2(1);
+  const arg_1 = vec2(1);
   var arg_2 = vec2<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl b/test/tint/builtins/gen/var/select/43741e.wgsl
index 03e129e..62d6d08 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<4, fa>, vec<4, fa>, vec<4, bool>) -> vec<4, fa>
 fn select_43741e() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.);
+  const arg_1 = vec4(1.);
   var arg_2 = vec4<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.dxc.hlsl
index 993c08e..674948a 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_43741e() {
   bool4 arg_2 = (true).xxxx;
-  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
+  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.fxc.hlsl
index 993c08e..674948a 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_43741e() {
   bool4 arg_2 = (true).xxxx;
-  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
+  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.glsl
index 599a3ef..ad6e80e 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_43741e() {
   bvec4 arg_2 = bvec4(true);
-  ivec4 res = mix(ivec4(1), ivec4(1), arg_2);
+  vec4 res = mix(vec4(1.0f), vec4(1.0f), arg_2);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_43741e() {
   bvec4 arg_2 = bvec4(true);
-  ivec4 res = mix(ivec4(1), ivec4(1), arg_2);
+  vec4 res = mix(vec4(1.0f), vec4(1.0f), arg_2);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_43741e() {
   bvec4 arg_2 = bvec4(true);
-  ivec4 res = mix(ivec4(1), ivec4(1), arg_2);
+  vec4 res = mix(vec4(1.0f), vec4(1.0f), arg_2);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.msl b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.msl
index 051caae..04b8cba 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_43741e() {
   bool4 arg_2 = bool4(true);
-  int4 res = select(int4(1), int4(1), arg_2);
+  float4 res = select(float4(1.0f), float4(1.0f), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.spvasm
index d13a0ea..07fdf64 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 43
+; Bound: 39
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,43 +37,39 @@
          %16 = OpConstantComposite %v4bool %true %true %true %true
 %_ptr_Function_v4bool = OpTypePointer Function %v4bool
          %19 = OpConstantNull %v4bool
-        %int = OpTypeInt 32 1
-      %v4int = OpTypeVector %int 4
-      %int_1 = OpConstant %int 1
-         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
-%_ptr_Function_v4int = OpTypePointer Function %v4int
-         %28 = OpConstantNull %v4int
-         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+%_ptr_Function_v4float = OpTypePointer Function %v4float
+         %26 = OpTypeFunction %v4float
 %select_43741e = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_v4bool Function %19
-        %res = OpVariable %_ptr_Function_v4int Function %28
+        %res = OpVariable %_ptr_Function_v4float Function %5
                OpStore %arg_2 %16
-         %23 = OpLoad %v4bool %arg_2
-         %20 = OpSelect %v4int %23 %25 %25
+         %21 = OpLoad %v4bool %arg_2
+         %20 = OpSelect %v4float %21 %23 %23
                OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %select_43741e
+%vertex_main_inner = OpFunction %v4float None %26
+         %28 = OpLabel
+         %29 = OpFunctionCall %void %select_43741e
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %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
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %select_43741e
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %select_43741e
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %select_43741e
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %select_43741e
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.wgsl
index 87daa96..5936026 100644
--- a/test/tint/builtins/gen/var/select/43741e.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/43741e.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_43741e() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.0);
+  const arg_1 = vec4(1.0);
   var arg_2 = vec4<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl b/test/tint/builtins/gen/var/select/494051.wgsl
index 2ce1326..6dc6a4c 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl
+++ b/test/tint/builtins/gen/var/select/494051.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(fa, fa, bool) -> fa
 fn select_494051() {
-  const arg_0 = 1;
-  const arg_1 = 1;
+  const arg_0 = 1.;
+  const arg_1 = 1.;
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/494051.wgsl.expected.dxc.hlsl
index 9997508..49eed58 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/494051.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_494051() {
   bool arg_2 = true;
-  int res = (arg_2 ? 1 : 1);
+  float res = (arg_2 ? 1.0f : 1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/494051.wgsl.expected.fxc.hlsl
index 9997508..49eed58 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/494051.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_494051() {
   bool arg_2 = true;
-  int res = (arg_2 ? 1 : 1);
+  float res = (arg_2 ? 1.0f : 1.0f);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/494051.wgsl.expected.glsl
index f3cd579..b143ed8 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/494051.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_494051() {
   bool arg_2 = true;
-  int res = (arg_2 ? 1 : 1);
+  float res = (arg_2 ? 1.0f : 1.0f);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_494051() {
   bool arg_2 = true;
-  int res = (arg_2 ? 1 : 1);
+  float res = (arg_2 ? 1.0f : 1.0f);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_494051() {
   bool arg_2 = true;
-  int res = (arg_2 ? 1 : 1);
+  float res = (arg_2 ? 1.0f : 1.0f);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl.expected.msl b/test/tint/builtins/gen/var/select/494051.wgsl.expected.msl
index 4fe8a0c..91f4644 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/494051.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_494051() {
   bool arg_2 = true;
-  int res = select(1, 1, arg_2);
+  float res = select(1.0f, 1.0f, arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/494051.wgsl.expected.spvasm
index e2e64aa..87f6b82 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/494051.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,41 +35,38 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-      %int_1 = OpConstant %int 1
-%_ptr_Function_int = OpTypePointer Function %int
-         %24 = OpConstantNull %int
-         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
+%_ptr_Function_float = OpTypePointer Function %float
+         %23 = OpTypeFunction %v4float
 %select_494051 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-        %res = OpVariable %_ptr_Function_int Function %24
+        %res = OpVariable %_ptr_Function_float Function %8
                OpStore %arg_2 %true
-         %20 = OpLoad %bool %arg_2
-         %18 = OpSelect %int %20 %int_1 %int_1
+         %19 = OpLoad %bool %arg_2
+         %18 = OpSelect %float %19 %float_1 %float_1
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %25
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %select_494051
+%vertex_main_inner = OpFunction %v4float None %23
+         %25 = OpLabel
+         %26 = OpFunctionCall %void %select_494051
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %31
+         %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
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %select_494051
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %select_494051
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %select_494051
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %select_494051
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/494051.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/494051.wgsl.expected.wgsl
index 29cfaa5..fbd4a7a 100644
--- a/test/tint/builtins/gen/var/select/494051.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/494051.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_494051() {
-  const arg_0 = 1;
-  const arg_1 = 1;
+  const arg_0 = 1.0;
+  const arg_1 = 1.0;
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl b/test/tint/builtins/gen/var/select/4c4738.wgsl
index ea809f7..3945eba 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<4, ia>, vec<4, ia>, vec<4, bool>) -> vec<4, ia>
 fn select_4c4738() {
-  const arg_0 = vec4(1.0);
-  const arg_1 = vec4(1.0);
+  const arg_0 = vec4(1);
+  const arg_1 = vec4(1);
   var arg_2 = vec4<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.dxc.hlsl
index 7dd0091..b497edc 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_4c4738() {
   bool4 arg_2 = (true).xxxx;
-  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
+  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.fxc.hlsl
index 7dd0091..b497edc 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_4c4738() {
   bool4 arg_2 = (true).xxxx;
-  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
+  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.glsl
index a5de0a2..699889b 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_4c4738() {
   bvec4 arg_2 = bvec4(true);
-  vec4 res = mix(vec4(1.0f), vec4(1.0f), arg_2);
+  ivec4 res = mix(ivec4(1), ivec4(1), arg_2);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_4c4738() {
   bvec4 arg_2 = bvec4(true);
-  vec4 res = mix(vec4(1.0f), vec4(1.0f), arg_2);
+  ivec4 res = mix(ivec4(1), ivec4(1), arg_2);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_4c4738() {
   bvec4 arg_2 = bvec4(true);
-  vec4 res = mix(vec4(1.0f), vec4(1.0f), arg_2);
+  ivec4 res = mix(ivec4(1), ivec4(1), arg_2);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.msl b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.msl
index 8282102..f5f9827 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_4c4738() {
   bool4 arg_2 = bool4(true);
-  float4 res = select(float4(1.0f), float4(1.0f), arg_2);
+  int4 res = select(int4(1), int4(1), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.spvasm
index 559b2ea..f67d90d 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 39
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,39 +37,43 @@
          %16 = OpConstantComposite %v4bool %true %true %true %true
 %_ptr_Function_v4bool = OpTypePointer Function %v4bool
          %19 = OpConstantNull %v4bool
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %28 = OpConstantNull %v4int
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %23 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %26 = OpTypeFunction %v4float
 %select_4c4738 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_v4bool Function %19
-        %res = OpVariable %_ptr_Function_v4float Function %5
+        %res = OpVariable %_ptr_Function_v4int Function %28
                OpStore %arg_2 %16
-         %21 = OpLoad %v4bool %arg_2
-         %20 = OpSelect %v4float %21 %23 %23
+         %23 = OpLoad %v4bool %arg_2
+         %20 = OpSelect %v4int %23 %25 %25
                OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %select_4c4738
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %select_4c4738
                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
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %select_4c4738
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_4c4738
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %select_4c4738
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_4c4738
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.wgsl
index 020011e..cae54e6 100644
--- a/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/4c4738.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_4c4738() {
-  const arg_0 = vec4(1.0);
-  const arg_1 = vec4(1.0);
+  const arg_0 = vec4(1);
+  const arg_1 = vec4(1);
   var arg_2 = vec4<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl b/test/tint/builtins/gen/var/select/4e60da.wgsl
index 94ffa69..e9d3673 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<2, fa>, vec<2, fa>, bool) -> vec<2, fa>
 fn select_4e60da() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.);
+  const arg_1 = vec2(1.);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.dxc.hlsl
index 437a3bd..9554426 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_4e60da() {
   bool arg_2 = true;
-  int2 res = (arg_2 ? (1).xx : (1).xx);
+  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.fxc.hlsl
index 437a3bd..9554426 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_4e60da() {
   bool arg_2 = true;
-  int2 res = (arg_2 ? (1).xx : (1).xx);
+  float2 res = (arg_2 ? (1.0f).xx : (1.0f).xx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.glsl
index 964d045..5cfc7ec 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_4e60da() {
   bool arg_2 = true;
-  ivec2 res = (arg_2 ? ivec2(1) : ivec2(1));
+  vec2 res = (arg_2 ? vec2(1.0f) : vec2(1.0f));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_4e60da() {
   bool arg_2 = true;
-  ivec2 res = (arg_2 ? ivec2(1) : ivec2(1));
+  vec2 res = (arg_2 ? vec2(1.0f) : vec2(1.0f));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_4e60da() {
   bool arg_2 = true;
-  ivec2 res = (arg_2 ? ivec2(1) : ivec2(1));
+  vec2 res = (arg_2 ? vec2(1.0f) : vec2(1.0f));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.msl b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.msl
index de9d7c9..44d0fbd 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_4e60da() {
   bool arg_2 = true;
-  int2 res = select(int2(1), int2(1), arg_2);
+  float2 res = select(float2(1.0f), float2(1.0f), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.spvasm
index 4baeec3..5d377c6 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 44
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,48 +35,46 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-        %int = OpTypeInt 32 1
-      %v2int = OpTypeVector %int 2
-      %int_1 = OpConstant %int 1
-         %23 = OpConstantComposite %v2int %int_1 %int_1
+    %v2float = OpTypeVector %float 2
+    %float_1 = OpConstant %float 1
+         %22 = OpConstantComposite %v2float %float_1 %float_1
      %v2bool = OpTypeVector %bool 2
 %_ptr_Function_v2bool = OpTypePointer Function %v2bool
-         %27 = OpConstantNull %v2bool
-%_ptr_Function_v2int = OpTypePointer Function %v2int
-         %31 = OpConstantNull %v2int
-         %32 = OpTypeFunction %v4float
-    %float_1 = OpConstant %float 1
+         %26 = OpConstantNull %v2bool
+%_ptr_Function_v2float = OpTypePointer Function %v2float
+         %30 = OpConstantNull %v2float
+         %31 = OpTypeFunction %v4float
 %select_4e60da = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-         %25 = OpVariable %_ptr_Function_v2bool Function %27
-        %res = OpVariable %_ptr_Function_v2int Function %31
+         %24 = OpVariable %_ptr_Function_v2bool Function %26
+        %res = OpVariable %_ptr_Function_v2float Function %30
                OpStore %arg_2 %true
-         %21 = OpLoad %bool %arg_2
-         %28 = OpCompositeConstruct %v2bool %21 %21
-         %18 = OpSelect %v2int %28 %23 %23
+         %20 = OpLoad %bool %arg_2
+         %27 = OpCompositeConstruct %v2bool %20 %20
+         %18 = OpSelect %v2float %27 %22 %22
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %32
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %select_4e60da
+%vertex_main_inner = OpFunction %v4float None %31
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %select_4e60da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %37 = OpLabel
-         %38 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %38
+         %36 = OpLabel
+         %37 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %37
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %41 = OpLabel
-         %42 = OpFunctionCall %void %select_4e60da
+         %39 = OpLabel
+         %40 = OpFunctionCall %void %select_4e60da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %44 = OpLabel
-         %45 = OpFunctionCall %void %select_4e60da
+         %42 = OpLabel
+         %43 = OpFunctionCall %void %select_4e60da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.wgsl
index aced362..7523a0a 100644
--- a/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/4e60da.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_4e60da() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.0);
+  const arg_1 = vec2(1.0);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl b/test/tint/builtins/gen/var/select/9b478d.wgsl
index 51949fe..927eb44 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl
+++ b/test/tint/builtins/gen/var/select/9b478d.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(ia, ia, bool) -> ia
 fn select_9b478d() {
-  const arg_0 = 1.0;
-  const arg_1 = 1.0;
+  const arg_0 = 1;
+  const arg_1 = 1;
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.dxc.hlsl
index a7b93ce..1f5212f 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_9b478d() {
   bool arg_2 = true;
-  float res = (arg_2 ? 1.0f : 1.0f);
+  int res = (arg_2 ? 1 : 1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.fxc.hlsl
index a7b93ce..1f5212f 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_9b478d() {
   bool arg_2 = true;
-  float res = (arg_2 ? 1.0f : 1.0f);
+  int res = (arg_2 ? 1 : 1);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.glsl
index 7fc4bda..2ddd9bb 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_9b478d() {
   bool arg_2 = true;
-  float res = (arg_2 ? 1.0f : 1.0f);
+  int res = (arg_2 ? 1 : 1);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_9b478d() {
   bool arg_2 = true;
-  float res = (arg_2 ? 1.0f : 1.0f);
+  int res = (arg_2 ? 1 : 1);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_9b478d() {
   bool arg_2 = true;
-  float res = (arg_2 ? 1.0f : 1.0f);
+  int res = (arg_2 ? 1 : 1);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.msl b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.msl
index 930c5f7..6d1c93c 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_9b478d() {
   bool arg_2 = true;
-  float res = select(1.0f, 1.0f, arg_2);
+  int res = select(1, 1, arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.spvasm
index 6eafe79..cc14da1 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/9b478d.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
                OpMemoryModel Logical GLSL450
@@ -35,38 +35,41 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
+        %int = OpTypeInt 32 1
+      %int_1 = OpConstant %int 1
+%_ptr_Function_int = OpTypePointer Function %int
+         %24 = OpConstantNull %int
+         %25 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-%_ptr_Function_float = OpTypePointer Function %float
-         %23 = OpTypeFunction %v4float
 %select_9b478d = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-        %res = OpVariable %_ptr_Function_float Function %8
+        %res = OpVariable %_ptr_Function_int Function %24
                OpStore %arg_2 %true
-         %19 = OpLoad %bool %arg_2
-         %18 = OpSelect %float %19 %float_1 %float_1
+         %20 = OpLoad %bool %arg_2
+         %18 = OpSelect %int %20 %int_1 %int_1
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %23
-         %25 = OpLabel
-         %26 = OpFunctionCall %void %select_9b478d
+%vertex_main_inner = OpFunction %v4float None %25
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %select_9b478d
                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
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %select_9b478d
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %select_9b478d
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %select_9b478d
+         %37 = OpLabel
+         %38 = OpFunctionCall %void %select_9b478d
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.wgsl
index bede1ce..fdc87e7 100644
--- a/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/9b478d.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_9b478d() {
-  const arg_0 = 1.0;
-  const arg_1 = 1.0;
+  const arg_0 = 1;
+  const arg_1 = 1;
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl b/test/tint/builtins/gen/var/select/b93806.wgsl
index 462821c..7c05225 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<3, ia>, vec<3, ia>, vec<3, bool>) -> vec<3, ia>
 fn select_b93806() {
-  const arg_0 = vec3(1.0);
-  const arg_1 = vec3(1.0);
+  const arg_0 = vec3(1);
+  const arg_1 = vec3(1);
   var arg_2 = vec3<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.dxc.hlsl
index 9edfa54..8d124f7 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_b93806() {
   bool3 arg_2 = (true).xxx;
-  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
+  int3 res = (arg_2 ? (1).xxx : (1).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.fxc.hlsl
index 9edfa54..8d124f7 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_b93806() {
   bool3 arg_2 = (true).xxx;
-  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
+  int3 res = (arg_2 ? (1).xxx : (1).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.glsl
index 2435602..a3b90cd 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_b93806() {
   bvec3 arg_2 = bvec3(true);
-  vec3 res = mix(vec3(1.0f), vec3(1.0f), arg_2);
+  ivec3 res = mix(ivec3(1), ivec3(1), arg_2);
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_b93806() {
   bvec3 arg_2 = bvec3(true);
-  vec3 res = mix(vec3(1.0f), vec3(1.0f), arg_2);
+  ivec3 res = mix(ivec3(1), ivec3(1), arg_2);
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_b93806() {
   bvec3 arg_2 = bvec3(true);
-  vec3 res = mix(vec3(1.0f), vec3(1.0f), arg_2);
+  ivec3 res = mix(ivec3(1), ivec3(1), arg_2);
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.msl b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.msl
index 181a35b..cce3dc6e 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_b93806() {
   bool3 arg_2 = bool3(true);
-  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
+  int3 res = select(int3(1), int3(1), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.spvasm
index b08f45f..7e0dc12 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 41
+; Bound: 43
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -37,41 +37,43 @@
          %16 = OpConstantComposite %v3bool %true %true %true
 %_ptr_Function_v3bool = OpTypePointer Function %v3bool
          %19 = OpConstantNull %v3bool
-    %v3float = OpTypeVector %float 3
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %25 = OpConstantComposite %v3int %int_1 %int_1 %int_1
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %28 = OpConstantNull %v3int
+         %29 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
-         %24 = OpConstantComposite %v3float %float_1 %float_1 %float_1
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %27 = OpConstantNull %v3float
-         %28 = OpTypeFunction %v4float
 %select_b93806 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_v3bool Function %19
-        %res = OpVariable %_ptr_Function_v3float Function %27
+        %res = OpVariable %_ptr_Function_v3int Function %28
                OpStore %arg_2 %16
-         %22 = OpLoad %v3bool %arg_2
-         %20 = OpSelect %v3float %22 %24 %24
+         %23 = OpLoad %v3bool %arg_2
+         %20 = OpSelect %v3int %23 %25 %25
                OpStore %res %20
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %28
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %select_b93806
+%vertex_main_inner = OpFunction %v4float None %29
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %select_b93806
                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
-         %36 = OpLabel
-         %37 = OpFunctionCall %void %select_b93806
+         %38 = OpLabel
+         %39 = OpFunctionCall %void %select_b93806
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %39 = OpLabel
-         %40 = OpFunctionCall %void %select_b93806
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_b93806
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.wgsl
index 56cb234..8a488da 100644
--- a/test/tint/builtins/gen/var/select/b93806.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/b93806.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_b93806() {
-  const arg_0 = vec3(1.0);
-  const arg_1 = vec3(1.0);
+  const arg_0 = vec3(1);
+  const arg_1 = vec3(1);
   var arg_2 = vec3<bool>(true);
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl b/test/tint/builtins/gen/var/select/dfab3b.wgsl
index 1f1bfef..6becfda 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<3, ia>, vec<3, ia>, bool) -> vec<3, ia>
 fn select_dfab3b() {
-  const arg_0 = vec3(1.0);
-  const arg_1 = vec3(1.0);
+  const arg_0 = vec3(1);
+  const arg_1 = vec3(1);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.dxc.hlsl
index c87f99d..691ef05 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_dfab3b() {
   bool arg_2 = true;
-  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
+  int3 res = (arg_2 ? (1).xxx : (1).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.fxc.hlsl
index c87f99d..691ef05 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_dfab3b() {
   bool arg_2 = true;
-  float3 res = (arg_2 ? (1.0f).xxx : (1.0f).xxx);
+  int3 res = (arg_2 ? (1).xxx : (1).xxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.glsl
index ed4de68..e1c9cc0 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_dfab3b() {
   bool arg_2 = true;
-  vec3 res = (arg_2 ? vec3(1.0f) : vec3(1.0f));
+  ivec3 res = (arg_2 ? ivec3(1) : ivec3(1));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_dfab3b() {
   bool arg_2 = true;
-  vec3 res = (arg_2 ? vec3(1.0f) : vec3(1.0f));
+  ivec3 res = (arg_2 ? ivec3(1) : ivec3(1));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_dfab3b() {
   bool arg_2 = true;
-  vec3 res = (arg_2 ? vec3(1.0f) : vec3(1.0f));
+  ivec3 res = (arg_2 ? ivec3(1) : ivec3(1));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.msl b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.msl
index 5853292..88188e6 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_dfab3b() {
   bool arg_2 = true;
-  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
+  int3 res = select(int3(1), int3(1), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.spvasm
index 43e0abf..cd9684f 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 44
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,46 +35,48 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-         %22 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+        %int = OpTypeInt 32 1
+      %v3int = OpTypeVector %int 3
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v3int %int_1 %int_1 %int_1
      %v3bool = OpTypeVector %bool 3
 %_ptr_Function_v3bool = OpTypePointer Function %v3bool
-         %26 = OpConstantNull %v3bool
-%_ptr_Function_v3float = OpTypePointer Function %v3float
-         %30 = OpConstantNull %v3float
-         %31 = OpTypeFunction %v4float
+         %27 = OpConstantNull %v3bool
+%_ptr_Function_v3int = OpTypePointer Function %v3int
+         %31 = OpConstantNull %v3int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %select_dfab3b = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-         %24 = OpVariable %_ptr_Function_v3bool Function %26
-        %res = OpVariable %_ptr_Function_v3float Function %30
+         %25 = OpVariable %_ptr_Function_v3bool Function %27
+        %res = OpVariable %_ptr_Function_v3int Function %31
                OpStore %arg_2 %true
-         %20 = OpLoad %bool %arg_2
-         %27 = OpCompositeConstruct %v3bool %20 %20 %20
-         %18 = OpSelect %v3float %27 %22 %22
+         %21 = OpLoad %bool %arg_2
+         %28 = OpCompositeConstruct %v3bool %21 %21 %21
+         %18 = OpSelect %v3int %28 %23 %23
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %31
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %select_dfab3b
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %select_dfab3b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %36 = OpLabel
-         %37 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %37
+         %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 %select_dfab3b
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_dfab3b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %42 = OpLabel
-         %43 = OpFunctionCall %void %select_dfab3b
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %select_dfab3b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.wgsl
index 1fc9ba7..f2474d3 100644
--- a/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/dfab3b.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_dfab3b() {
-  const arg_0 = vec3(1.0);
-  const arg_1 = vec3(1.0);
+  const arg_0 = vec3(1);
+  const arg_1 = vec3(1);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl b/test/tint/builtins/gen/var/select/e381c3.wgsl
index 17408f0..b752d20 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl
@@ -23,8 +23,8 @@
 
 // fn select(vec<4, ia>, vec<4, ia>, bool) -> vec<4, ia>
 fn select_e381c3() {
-  const arg_0 = vec4(1.0);
-  const arg_1 = vec4(1.0);
+  const arg_0 = vec4(1);
+  const arg_1 = vec4(1);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.dxc.hlsl
index cd574f9..bd98b01 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.dxc.hlsl
@@ -1,6 +1,6 @@
 void select_e381c3() {
   bool arg_2 = true;
-  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
+  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.fxc.hlsl
index cd574f9..bd98b01 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.fxc.hlsl
@@ -1,6 +1,6 @@
 void select_e381c3() {
   bool arg_2 = true;
-  float4 res = (arg_2 ? (1.0f).xxxx : (1.0f).xxxx);
+  int4 res = (arg_2 ? (1).xxxx : (1).xxxx);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.glsl b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.glsl
index d9e07d8..206c61a 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 
 void select_e381c3() {
   bool arg_2 = true;
-  vec4 res = (arg_2 ? vec4(1.0f) : vec4(1.0f));
+  ivec4 res = (arg_2 ? ivec4(1) : ivec4(1));
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 
 void select_e381c3() {
   bool arg_2 = true;
-  vec4 res = (arg_2 ? vec4(1.0f) : vec4(1.0f));
+  ivec4 res = (arg_2 ? ivec4(1) : ivec4(1));
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 
 void select_e381c3() {
   bool arg_2 = true;
-  vec4 res = (arg_2 ? vec4(1.0f) : vec4(1.0f));
+  ivec4 res = (arg_2 ? ivec4(1) : ivec4(1));
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.msl b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.msl
index 7d62032..d0647009 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.msl
@@ -3,7 +3,7 @@
 using namespace metal;
 void select_e381c3() {
   bool arg_2 = true;
-  float4 res = select(float4(1.0f), float4(1.0f), arg_2);
+  int4 res = select(int4(1), int4(1), arg_2);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.spvasm b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.spvasm
index 620d206..977fce2 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.spvasm
@@ -1,7 +1,7 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 42
+; Bound: 46
 ; Schema: 0
                OpCapability Shader
                OpMemoryModel Logical GLSL450
@@ -35,44 +35,48 @@
        %true = OpConstantTrue %bool
 %_ptr_Function_bool = OpTypePointer Function %bool
          %17 = OpConstantNull %bool
-    %float_1 = OpConstant %float 1
-         %21 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
+        %int = OpTypeInt 32 1
+      %v4int = OpTypeVector %int 4
+      %int_1 = OpConstant %int 1
+         %23 = OpConstantComposite %v4int %int_1 %int_1 %int_1 %int_1
      %v4bool = OpTypeVector %bool 4
 %_ptr_Function_v4bool = OpTypePointer Function %v4bool
-         %25 = OpConstantNull %v4bool
-%_ptr_Function_v4float = OpTypePointer Function %v4float
-         %29 = OpTypeFunction %v4float
+         %27 = OpConstantNull %v4bool
+%_ptr_Function_v4int = OpTypePointer Function %v4int
+         %31 = OpConstantNull %v4int
+         %32 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %select_e381c3 = OpFunction %void None %9
          %12 = OpLabel
       %arg_2 = OpVariable %_ptr_Function_bool Function %17
-         %23 = OpVariable %_ptr_Function_v4bool Function %25
-        %res = OpVariable %_ptr_Function_v4float Function %5
+         %25 = OpVariable %_ptr_Function_v4bool Function %27
+        %res = OpVariable %_ptr_Function_v4int Function %31
                OpStore %arg_2 %true
-         %19 = OpLoad %bool %arg_2
-         %26 = OpCompositeConstruct %v4bool %19 %19 %19 %19
-         %18 = OpSelect %v4float %26 %21 %21
+         %21 = OpLoad %bool %arg_2
+         %28 = OpCompositeConstruct %v4bool %21 %21 %21 %21
+         %18 = OpSelect %v4int %28 %23 %23
                OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %29
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %select_e381c3
+%vertex_main_inner = OpFunction %v4float None %32
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %select_e381c3
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %35
+         %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
-         %37 = OpLabel
-         %38 = OpFunctionCall %void %select_e381c3
+         %41 = OpLabel
+         %42 = OpFunctionCall %void %select_e381c3
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %40 = OpLabel
-         %41 = OpFunctionCall %void %select_e381c3
+         %44 = OpLabel
+         %45 = OpFunctionCall %void %select_e381c3
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.wgsl b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.wgsl
index 61e62cd..fb06bf1 100644
--- a/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/select/e381c3.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn select_e381c3() {
-  const arg_0 = vec4(1.0);
-  const arg_1 = vec4(1.0);
+  const arg_0 = vec4(1);
+  const arg_1 = vec4(1);
   var arg_2 = true;
   var res = select(arg_0, arg_1, arg_2);
 }
diff --git a/test/tint/builtins/gen/var/sign/0799fd.wgsl b/test/tint/builtins/gen/var/sign/0799fd.wgsl
index 1ee65e9..7f7c3fb 100644
--- a/test/tint/builtins/gen/var/sign/0799fd.wgsl
+++ b/test/tint/builtins/gen/var/sign/0799fd.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(vec<2, fa>) -> vec<2, fa>
 fn sign_0799fd() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.);
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/0799fd.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/0799fd.wgsl.expected.wgsl
index 6193c87..c3eb4d7 100644
--- a/test/tint/builtins/gen/var/sign/0799fd.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/0799fd.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_0799fd() {
-  const arg_0 = vec2(1);
+  const arg_0 = vec2(1.0);
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ab6301.wgsl b/test/tint/builtins/gen/var/sign/ab6301.wgsl
index cb4bdf9..89a1334 100644
--- a/test/tint/builtins/gen/var/sign/ab6301.wgsl
+++ b/test/tint/builtins/gen/var/sign/ab6301.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(vec<3, fa>) -> vec<3, fa>
 fn sign_ab6301() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.);
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/ab6301.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/ab6301.wgsl.expected.wgsl
index acf4f43..0d67140 100644
--- a/test/tint/builtins/gen/var/sign/ab6301.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/ab6301.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_ab6301() {
-  const arg_0 = vec3(1);
+  const arg_0 = vec3(1.0);
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/c8289c.wgsl b/test/tint/builtins/gen/var/sign/c8289c.wgsl
index c6e764b..72e234e 100644
--- a/test/tint/builtins/gen/var/sign/c8289c.wgsl
+++ b/test/tint/builtins/gen/var/sign/c8289c.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(fa) -> fa
 fn sign_c8289c() {
-  const arg_0 = 1;
+  const arg_0 = 1.;
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/c8289c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/c8289c.wgsl.expected.wgsl
index 60ab1f1..7241526 100644
--- a/test/tint/builtins/gen/var/sign/c8289c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/c8289c.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_c8289c() {
-  const arg_0 = 1;
+  const arg_0 = 1.0;
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/f5da6a.wgsl b/test/tint/builtins/gen/var/sign/f5da6a.wgsl
index e5287d2..c11264a 100644
--- a/test/tint/builtins/gen/var/sign/f5da6a.wgsl
+++ b/test/tint/builtins/gen/var/sign/f5da6a.wgsl
@@ -23,7 +23,7 @@
 
 // fn sign(vec<4, fa>) -> vec<4, fa>
 fn sign_f5da6a() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.);
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/sign/f5da6a.wgsl.expected.wgsl b/test/tint/builtins/gen/var/sign/f5da6a.wgsl.expected.wgsl
index d01498f..46ae63e 100644
--- a/test/tint/builtins/gen/var/sign/f5da6a.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/sign/f5da6a.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn sign_f5da6a() {
-  const arg_0 = vec4(1);
+  const arg_0 = vec4(1.0);
   var res = sign(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/step/38cd79.wgsl b/test/tint/builtins/gen/var/step/38cd79.wgsl
index ca5eb21..a75dcc2 100644
--- a/test/tint/builtins/gen/var/step/38cd79.wgsl
+++ b/test/tint/builtins/gen/var/step/38cd79.wgsl
@@ -23,8 +23,8 @@
 
 // fn step(vec<4, fa>, vec<4, fa>) -> vec<4, fa>
 fn step_38cd79() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.);
+  const arg_1 = vec4(1.);
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/38cd79.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/38cd79.wgsl.expected.wgsl
index 852b4e3..035eba7 100644
--- a/test/tint/builtins/gen/var/step/38cd79.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/38cd79.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn step_38cd79() {
-  const arg_0 = vec4(1);
-  const arg_1 = vec4(1);
+  const arg_0 = vec4(1.0);
+  const arg_1 = vec4(1.0);
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/415879.wgsl b/test/tint/builtins/gen/var/step/415879.wgsl
index 6d51afa..27e9ed5 100644
--- a/test/tint/builtins/gen/var/step/415879.wgsl
+++ b/test/tint/builtins/gen/var/step/415879.wgsl
@@ -23,8 +23,8 @@
 
 // fn step(vec<3, fa>, vec<3, fa>) -> vec<3, fa>
 fn step_415879() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.);
+  const arg_1 = vec3(1.);
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/415879.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/415879.wgsl.expected.wgsl
index a44fd51..d03614a 100644
--- a/test/tint/builtins/gen/var/step/415879.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/415879.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn step_415879() {
-  const arg_0 = vec3(1);
-  const arg_1 = vec3(1);
+  const arg_0 = vec3(1.0);
+  const arg_1 = vec3(1.0);
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/7c7e5c.wgsl b/test/tint/builtins/gen/var/step/7c7e5c.wgsl
index 60953e1..6023771 100644
--- a/test/tint/builtins/gen/var/step/7c7e5c.wgsl
+++ b/test/tint/builtins/gen/var/step/7c7e5c.wgsl
@@ -23,8 +23,8 @@
 
 // fn step(vec<2, fa>, vec<2, fa>) -> vec<2, fa>
 fn step_7c7e5c() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.);
+  const arg_1 = vec2(1.);
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/7c7e5c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/7c7e5c.wgsl.expected.wgsl
index c913fb9..9fb4a70 100644
--- a/test/tint/builtins/gen/var/step/7c7e5c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/7c7e5c.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn step_7c7e5c() {
-  const arg_0 = vec2(1);
-  const arg_1 = vec2(1);
+  const arg_0 = vec2(1.0);
+  const arg_1 = vec2(1.0);
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/f9b70c.wgsl b/test/tint/builtins/gen/var/step/f9b70c.wgsl
index 422c765..ab183d1 100644
--- a/test/tint/builtins/gen/var/step/f9b70c.wgsl
+++ b/test/tint/builtins/gen/var/step/f9b70c.wgsl
@@ -23,8 +23,8 @@
 
 // fn step(fa, fa) -> fa
 fn step_f9b70c() {
-  const arg_0 = 1;
-  const arg_1 = 1;
+  const arg_0 = 1.;
+  const arg_1 = 1.;
   var res = step(arg_0, arg_1);
 }
 
diff --git a/test/tint/builtins/gen/var/step/f9b70c.wgsl.expected.wgsl b/test/tint/builtins/gen/var/step/f9b70c.wgsl.expected.wgsl
index 4222282..551e4f6 100644
--- a/test/tint/builtins/gen/var/step/f9b70c.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/step/f9b70c.wgsl.expected.wgsl
@@ -1,6 +1,6 @@
 fn step_f9b70c() {
-  const arg_0 = 1;
-  const arg_1 = 1;
+  const arg_0 = 1.0;
+  const arg_1 = 1.0;
   var res = step(arg_0, arg_1);
 }