diff --git a/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.glsl
index 9cf62c5..97ee04d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0890c6.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp sampler3D arg_0;
 uvec3 textureDimensions_0890c6() {
-  highp sampler3D v_1 = arg_0;
-  uvec3 res = uvec3(textureSize(v_1, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_0890c6();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp sampler3D' to ' temp highp sampler3D'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp sampler3D arg_0;
 uvec3 textureDimensions_0890c6() {
-  highp sampler3D v_1 = arg_0;
-  uvec3 res = uvec3(textureSize(v_1, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_0890c6();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp sampler3D' to ' temp highp sampler3D'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp sampler3D arg_0;
 layout(location = 0) flat out uvec3 vertex_main_loc0_Output;
 uvec3 textureDimensions_0890c6() {
-  highp sampler3D v = arg_0;
-  uvec3 res = uvec3(textureSize(v, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'sampler3D' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp sampler3D' to ' temp highp sampler3D'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.dxc.hlsl
index 55fe17d..f3b8bdf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray arg_0 : register(t0, space1);
 uint2 textureDimensions_0ff9a4() {
-  TextureCubeArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_0ff9a4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.fxc.hlsl
index 55fe17d..f3b8bdf 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/0ff9a4.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray arg_0 : register(t0, space1);
 uint2 textureDimensions_0ff9a4() {
-  TextureCubeArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_0ff9a4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.dxc.hlsl
index d3038ab..172e571 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_13f8db() {
-  Texture2D<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_13f8db();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.fxc.hlsl
index d3038ab..172e571 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_13f8db() {
-  Texture2D<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_13f8db();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.glsl
index f733e5a..18c8ddb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/13f8db.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp sampler2D arg_0;
 uvec2 textureDimensions_13f8db() {
-  highp sampler2D v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_13f8db();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp sampler2D' to ' temp highp sampler2D'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp sampler2D arg_0;
 uvec2 textureDimensions_13f8db() {
-  highp sampler2D v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_13f8db();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp sampler2D' to ' temp highp sampler2D'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp sampler2D arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_13f8db() {
-  highp sampler2D v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp sampler2D' to ' temp highp sampler2D'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.dxc.hlsl
index d249499..661efbd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_15b577() {
-  Texture2D<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_15b577();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.fxc.hlsl
index d249499..661efbd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/15b577.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_15b577() {
-  Texture2D<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_15b577();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.dxc.hlsl
index dd661b3..ac8b505 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_1bd78c() {
-  Texture2D<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_1bd78c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.fxc.hlsl
index dd661b3..ac8b505 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/1bd78c.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_1bd78c() {
-  Texture2D<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_1bd78c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.dxc.hlsl
index 8145324..fa703b0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_22b5b6() {
-  TextureCubeArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_22b5b6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.fxc.hlsl
index 8145324..fa703b0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/22b5b6.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_22b5b6() {
-  TextureCubeArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_22b5b6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.dxc.hlsl
index 913d315..9bd637e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_2e443d() {
-  Texture2D<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_2e443d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.fxc.hlsl
index 913d315..9bd637e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2e443d.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_2e443d() {
-  Texture2D<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_2e443d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.dxc.hlsl
index a56bb2a..73ec0d1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_2fd2a4() {
-  Texture2DArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_2fd2a4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.fxc.hlsl
index a56bb2a..73ec0d1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/2fd2a4.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_2fd2a4() {
-  Texture2DArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_2fd2a4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.dxc.hlsl
index b14a81d..fe64305 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_346fee() {
-  TextureCubeArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_346fee();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.fxc.hlsl
index b14a81d..fe64305 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_346fee() {
-  TextureCubeArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_346fee();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.glsl
index e7470f7..c994eae 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/346fee.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 460
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp usamplerCubeArray arg_0;
 uvec2 textureDimensions_346fee() {
-  highp usamplerCubeArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_346fee();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'usamplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform usamplerCubeArray' to ' temp usamplerCubeArray'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp usamplerCubeArray arg_0;
 uvec2 textureDimensions_346fee() {
-  highp usamplerCubeArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_346fee();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'usamplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform usamplerCubeArray' to ' temp usamplerCubeArray'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 
@@ -60,8 +40,7 @@
 uniform highp usamplerCubeArray arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_346fee() {
-  highp usamplerCubeArray v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'usamplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform usamplerCubeArray' to ' temp usamplerCubeArray'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.dxc.hlsl
index d46531b..aaa6caa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_382b16() {
-  TextureCube<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_382b16();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.fxc.hlsl
index d46531b..aaa6caa 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_382b16() {
-  TextureCube<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_382b16();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.glsl
index b550c1c..a121c9e 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/382b16.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp samplerCube arg_0;
 uvec2 textureDimensions_382b16() {
-  highp samplerCube v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_382b16();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'samplerCube' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp samplerCube' to ' temp highp samplerCube'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp samplerCube arg_0;
 uvec2 textureDimensions_382b16() {
-  highp samplerCube v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_382b16();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'samplerCube' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp samplerCube' to ' temp highp samplerCube'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp samplerCube arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_382b16() {
-  highp samplerCube v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'samplerCube' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp samplerCube' to ' temp highp samplerCube'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.dxc.hlsl
index 2f5d34b..e11ae4a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_3963d0() {
-  TextureCubeArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_3963d0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.fxc.hlsl
index 2f5d34b..e11ae4a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_3963d0() {
-  TextureCubeArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_3963d0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.glsl
index 8ea2a94..2c17fdb 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3963d0.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 460
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp isamplerCubeArray arg_0;
 uvec2 textureDimensions_3963d0() {
-  highp isamplerCubeArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_3963d0();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'isamplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform isamplerCubeArray' to ' temp isamplerCubeArray'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp isamplerCubeArray arg_0;
 uvec2 textureDimensions_3963d0() {
-  highp isamplerCubeArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_3963d0();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'isamplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform isamplerCubeArray' to ' temp isamplerCubeArray'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 
@@ -60,8 +40,7 @@
 uniform highp isamplerCubeArray arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_3963d0() {
-  highp isamplerCubeArray v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'isamplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform isamplerCubeArray' to ' temp isamplerCubeArray'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.dxc.hlsl
index 4772747..e990c19 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_3c66f0() {
-  TextureCubeArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_3c66f0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.fxc.hlsl
index 4772747..e990c19 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3c66f0.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_3c66f0() {
-  TextureCubeArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_3c66f0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.dxc.hlsl
index a6dbb2f..360020c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_3fc3dc() {
-  Texture2DArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_3fc3dc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.fxc.hlsl
index a6dbb2f..360020c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_3fc3dc() {
-  Texture2DArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_3fc3dc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.glsl
index 505084e..9e0165b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/3fc3dc.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp sampler2DArray arg_0;
 uvec2 textureDimensions_3fc3dc() {
-  highp sampler2DArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_3fc3dc();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'sampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp sampler2DArray' to ' temp highp sampler2DArray'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp sampler2DArray arg_0;
 uvec2 textureDimensions_3fc3dc() {
-  highp sampler2DArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_3fc3dc();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'sampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp sampler2DArray' to ' temp highp sampler2DArray'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp sampler2DArray arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_3fc3dc() {
-  highp sampler2DArray v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'sampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp sampler2DArray' to ' temp highp sampler2DArray'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.dxc.hlsl
index 131a4e2..9c84a0c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_49a067() {
-  TextureCube<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_49a067();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.fxc.hlsl
index 131a4e2..9c84a0c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/49a067.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_49a067() {
-  TextureCube<float4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_49a067();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.dxc.hlsl
index 51848a0..f6edba4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_528c0e() {
-  Texture2DArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_528c0e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.fxc.hlsl
index 51848a0..f6edba4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_528c0e() {
-  Texture2DArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_528c0e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.glsl
index ba723c5..10282c12 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/528c0e.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp usampler2DArray arg_0;
 uvec2 textureDimensions_528c0e() {
-  highp usampler2DArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_528c0e();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'usampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp usampler2DArray' to ' temp highp usampler2DArray'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp usampler2DArray arg_0;
 uvec2 textureDimensions_528c0e() {
-  highp usampler2DArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_528c0e();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'usampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp usampler2DArray' to ' temp highp usampler2DArray'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp usampler2DArray arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_528c0e() {
-  highp usampler2DArray v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'usampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp usampler2DArray' to ' temp highp usampler2DArray'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.dxc.hlsl
index 084a83a..bc0bd5c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_64dc74() {
-  TextureCube<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_64dc74();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.fxc.hlsl
index 084a83a..bc0bd5c 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_64dc74() {
-  TextureCube<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_64dc74();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.glsl
index 84a2d6b..71bdf20 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/64dc74.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp isamplerCube arg_0;
 uvec2 textureDimensions_64dc74() {
-  highp isamplerCube v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_64dc74();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'isamplerCube' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp isamplerCube' to ' temp highp isamplerCube'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp isamplerCube arg_0;
 uvec2 textureDimensions_64dc74() {
-  highp isamplerCube v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_64dc74();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'isamplerCube' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp isamplerCube' to ' temp highp isamplerCube'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp isamplerCube arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_64dc74() {
-  highp isamplerCube v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'isamplerCube' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp isamplerCube' to ' temp highp isamplerCube'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.glsl
index 83d1032..abb6b40 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6e6c7a.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp usampler3D arg_0;
 uvec3 textureDimensions_6e6c7a() {
-  highp usampler3D v_1 = arg_0;
-  uvec3 res = uvec3(textureSize(v_1, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_6e6c7a();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'usampler3D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp usampler3D' to ' temp highp usampler3D'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp usampler3D arg_0;
 uvec3 textureDimensions_6e6c7a() {
-  highp usampler3D v_1 = arg_0;
-  uvec3 res = uvec3(textureSize(v_1, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_6e6c7a();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'usampler3D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp usampler3D' to ' temp highp usampler3D'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp usampler3D arg_0;
 layout(location = 0) flat out uvec3 vertex_main_loc0_Output;
 uvec3 textureDimensions_6e6c7a() {
-  highp usampler3D v = arg_0;
-  uvec3 res = uvec3(textureSize(v, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'usampler3D' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp usampler3D' to ' temp highp usampler3D'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.dxc.hlsl
index a40bd48..d8728ad 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 uint2 textureDimensions_6f1b5d() {
-  Texture2D v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_6f1b5d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.fxc.hlsl
index a40bd48..d8728ad 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/6f1b5d.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 uint2 textureDimensions_6f1b5d() {
-  Texture2D v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_6f1b5d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.dxc.hlsl
index ce4ac17..c9689fe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube arg_0 : register(t0, space1);
 uint2 textureDimensions_79d168() {
-  TextureCube v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_79d168();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.fxc.hlsl
index ce4ac17..c9689fe 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/79d168.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube arg_0 : register(t0, space1);
 uint2 textureDimensions_79d168() {
-  TextureCube v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_79d168();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.dxc.hlsl
index d875380..1523ffc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 uint2 textureDimensions_991ea9() {
-  Texture2D v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_991ea9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.fxc.hlsl
index d875380..1523ffc 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 uint2 textureDimensions_991ea9() {
-  Texture2D v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_991ea9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.glsl
index 5bc77a6..6e7e534 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/991ea9.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp sampler2DShadow arg_0;
 uvec2 textureDimensions_991ea9() {
-  highp sampler2DShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_991ea9();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'sampler2DShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp sampler2DShadow' to ' temp highp sampler2DShadow'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp sampler2DShadow arg_0;
 uvec2 textureDimensions_991ea9() {
-  highp sampler2DShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_991ea9();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'sampler2DShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp sampler2DShadow' to ' temp highp sampler2DShadow'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp sampler2DShadow arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_991ea9() {
-  highp sampler2DShadow v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'sampler2DShadow' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp sampler2DShadow' to ' temp highp sampler2DShadow'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.dxc.hlsl
index 0bad8f3..d73e8e7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_9baf27() {
-  TextureCube<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_9baf27();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.fxc.hlsl
index 0bad8f3..d73e8e7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_9baf27() {
-  TextureCube<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_9baf27();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.glsl
index ed45493..4f2a6d4 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9baf27.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp usamplerCube arg_0;
 uvec2 textureDimensions_9baf27() {
-  highp usamplerCube v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_9baf27();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'usamplerCube' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp usamplerCube' to ' temp highp usamplerCube'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp usamplerCube arg_0;
 uvec2 textureDimensions_9baf27() {
-  highp usamplerCube v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_9baf27();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'usamplerCube' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp usamplerCube' to ' temp highp usamplerCube'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp usamplerCube arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_9baf27() {
-  highp usamplerCube v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'usamplerCube' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp usamplerCube' to ' temp highp usamplerCube'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.dxc.hlsl
index 7acbc63..bafdc90 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_9cd4ca() {
-  TextureCube<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_9cd4ca();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.fxc.hlsl
index 7acbc63..bafdc90 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9cd4ca.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_9cd4ca() {
-  TextureCube<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_9cd4ca();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.dxc.hlsl
index c6612ea..0bb5b2a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_9e0794() {
-  Texture2DArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_9e0794();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.fxc.hlsl
index c6612ea..0bb5b2a 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/9e0794.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_9e0794() {
-  Texture2DArray<uint4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_9e0794();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.dxc.hlsl
index cb982e2..7b2e493 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_a2ba5e() {
-  TextureCube<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_a2ba5e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.fxc.hlsl
index cb982e2..7b2e493 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a2ba5e.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_a2ba5e() {
-  TextureCube<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_a2ba5e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.dxc.hlsl
index 0186411..4e7c693 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_a48049() {
-  Texture2D<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_a48049();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.fxc.hlsl
index 0186411..4e7c693 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_a48049() {
-  Texture2D<int4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_a48049();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.glsl
index 2748f41..ccb5ba7 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/a48049.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp isampler2D arg_0;
 uvec2 textureDimensions_a48049() {
-  highp isampler2D v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_a48049();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'isampler2D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp isampler2D' to ' temp highp isampler2D'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp isampler2D arg_0;
 uvec2 textureDimensions_a48049() {
-  highp isampler2D v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_a48049();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'isampler2D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp isampler2D' to ' temp highp isampler2D'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp isampler2D arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_a48049() {
-  highp isampler2D v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'isampler2D' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp isampler2D' to ' temp highp isampler2D'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.dxc.hlsl
index 22331f4..4ce782f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_b3ab5e() {
-  TextureCubeArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_b3ab5e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.fxc.hlsl
index 22331f4..4ce782f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/b3ab5e.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_b3ab5e() {
-  TextureCubeArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_b3ab5e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.dxc.hlsl
index 3983947..cc6e498 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray arg_0 : register(t0, space1);
 uint2 textureDimensions_bd94c8() {
-  TextureCubeArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_bd94c8();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.fxc.hlsl
index 3983947..cc6e498 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray arg_0 : register(t0, space1);
 uint2 textureDimensions_bd94c8() {
-  TextureCubeArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_bd94c8();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.glsl
index ccd0348..bc00cb5 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/bd94c8.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 460
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp samplerCubeArrayShadow arg_0;
 uvec2 textureDimensions_bd94c8() {
-  highp samplerCubeArrayShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_bd94c8();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'samplerCubeArrayShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform samplerCubeArrayShadow' to ' temp samplerCubeArrayShadow'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp samplerCubeArrayShadow arg_0;
 uvec2 textureDimensions_bd94c8() {
-  highp samplerCubeArrayShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_bd94c8();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'samplerCubeArrayShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform samplerCubeArrayShadow' to ' temp samplerCubeArrayShadow'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 
@@ -60,8 +40,7 @@
 uniform highp samplerCubeArrayShadow arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_bd94c8() {
-  highp samplerCubeArrayShadow v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'samplerCubeArrayShadow' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform samplerCubeArrayShadow' to ' temp samplerCubeArrayShadow'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.glsl
index 8129873..401874f 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/c871f3.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp isampler3D arg_0;
 uvec3 textureDimensions_c871f3() {
-  highp isampler3D v_1 = arg_0;
-  uvec3 res = uvec3(textureSize(v_1, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_c871f3();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'isampler3D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp isampler3D' to ' temp highp isampler3D'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp isampler3D arg_0;
 uvec3 textureDimensions_c871f3() {
-  highp isampler3D v_1 = arg_0;
-  uvec3 res = uvec3(textureSize(v_1, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_c871f3();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'isampler3D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp isampler3D' to ' temp highp isampler3D'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp isampler3D arg_0;
 layout(location = 0) flat out uvec3 vertex_main_loc0_Output;
 uvec3 textureDimensions_c871f3() {
-  highp isampler3D v = arg_0;
-  uvec3 res = uvec3(textureSize(v, int(1u)));
+  uvec3 res = uvec3(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'isampler3D' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp isampler3D' to ' temp highp isampler3D'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.dxc.hlsl
index 9060536..80c5ee0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_cf2b50() {
-  TextureCubeArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_cf2b50();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.fxc.hlsl
index 9060536..80c5ee0 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 uint2 textureDimensions_cf2b50() {
-  TextureCubeArray<float4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_cf2b50();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.glsl
index dcff009..5b1bedd 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/cf2b50.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 460
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp samplerCubeArray arg_0;
 uvec2 textureDimensions_cf2b50() {
-  highp samplerCubeArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_cf2b50();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'samplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform samplerCubeArray' to ' temp samplerCubeArray'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp samplerCubeArray arg_0;
 uvec2 textureDimensions_cf2b50() {
-  highp samplerCubeArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_cf2b50();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'samplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform samplerCubeArray' to ' temp samplerCubeArray'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 460
 
 
@@ -60,8 +40,7 @@
 uniform highp samplerCubeArray arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_cf2b50() {
-  highp samplerCubeArray v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'samplerCubeArray' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform samplerCubeArray' to ' temp samplerCubeArray'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.dxc.hlsl
index 5bde41a..a36f68b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube arg_0 : register(t0, space1);
 uint2 textureDimensions_d3accd() {
-  TextureCube v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_d3accd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.fxc.hlsl
index 5bde41a..a36f68b 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 TextureCube arg_0 : register(t0, space1);
 uint2 textureDimensions_d3accd() {
-  TextureCube v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_d3accd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.glsl
index d529722..f97a180 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/d3accd.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp samplerCubeShadow arg_0;
 uvec2 textureDimensions_d3accd() {
-  highp samplerCubeShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_d3accd();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'samplerCubeShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp samplerCubeShadow' to ' temp highp samplerCubeShadow'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp samplerCubeShadow arg_0;
 uvec2 textureDimensions_d3accd() {
-  highp samplerCubeShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_d3accd();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'samplerCubeShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp samplerCubeShadow' to ' temp highp samplerCubeShadow'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp samplerCubeShadow arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_d3accd() {
-  highp samplerCubeShadow v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'samplerCubeShadow' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp samplerCubeShadow' to ' temp highp samplerCubeShadow'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.dxc.hlsl
index db03d75..b8ef5ae 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 uint2 textureDimensions_dfdc32() {
-  Texture2DArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_dfdc32();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.fxc.hlsl
index db03d75..b8ef5ae 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/dfdc32.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 uint2 textureDimensions_dfdc32() {
-  Texture2DArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_dfdc32();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.dxc.hlsl
index 42cc0f9..131a4e8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_e18a8b() {
-  Texture2D<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_e18a8b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.fxc.hlsl
index 42cc0f9..131a4e8 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint2 textureDimensions_e18a8b() {
-  Texture2D<uint4> v = arg_0;
-  uint3 v_1 = (0u).xxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u]);
-  uint2 res = v_1.xy;
+  uint3 v = (0u).xxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_e18a8b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.glsl
index 26092f9..d0d2d30 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e18a8b.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp usampler2D arg_0;
 uvec2 textureDimensions_e18a8b() {
-  highp usampler2D v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_e18a8b();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'usampler2D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp usampler2D' to ' temp highp usampler2D'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp usampler2D arg_0;
 uvec2 textureDimensions_e18a8b() {
-  highp usampler2D v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_e18a8b();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'usampler2D' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp usampler2D' to ' temp highp usampler2D'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp usampler2D arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_e18a8b() {
-  highp usampler2D v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)));
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)));
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'usampler2D' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp usampler2D' to ' temp highp usampler2D'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.dxc.hlsl
index ac37869..ab47a60 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_e4e310() {
-  Texture2DArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_e4e310();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.fxc.hlsl
index ac37869..ab47a60 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_e4e310() {
-  Texture2DArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_e4e310();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.glsl
index a32a9fe..1ce0339 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/e4e310.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp isampler2DArray arg_0;
 uvec2 textureDimensions_e4e310() {
-  highp isampler2DArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_e4e310();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'isampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp isampler2DArray' to ' temp highp isampler2DArray'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp isampler2DArray arg_0;
 uvec2 textureDimensions_e4e310() {
-  highp isampler2DArray v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_e4e310();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'isampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp isampler2DArray' to ' temp highp isampler2DArray'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp isampler2DArray arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_e4e310() {
-  highp isampler2DArray v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'isampler2DArray' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp isampler2DArray' to ' temp highp isampler2DArray'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.dxc.hlsl
index 0a35084..cbcf7b1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 uint2 textureDimensions_eafe19() {
-  Texture2DArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_eafe19();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.fxc.hlsl
index 0a35084..cbcf7b1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 uint2 textureDimensions_eafe19() {
-  Texture2DArray v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(1u), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(1u), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_eafe19();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.glsl
index 2fe4820..d08297d 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/eafe19.wgsl.expected.ir.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision highp float;
 precision highp int;
@@ -10,21 +8,12 @@
 } v;
 uniform highp sampler2DArrayShadow arg_0;
 uvec2 textureDimensions_eafe19() {
-  highp sampler2DArrayShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 void main() {
   v.tint_symbol = textureDimensions_eafe19();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:11: 'sampler2DArrayShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:11: '=' :  cannot convert from ' uniform highp sampler2DArrayShadow' to ' temp highp sampler2DArrayShadow'
-ERROR: 0:11: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 layout(binding = 0, std430)
@@ -33,22 +22,13 @@
 } v;
 uniform highp sampler2DArrayShadow arg_0;
 uvec2 textureDimensions_eafe19() {
-  highp sampler2DArrayShadow v_1 = arg_0;
-  uvec2 res = uvec2(textureSize(v_1, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
 void main() {
   v.tint_symbol = textureDimensions_eafe19();
 }
-error: Error parsing GLSL shader:
-ERROR: 0:9: 'sampler2DArrayShadow' : sampler/image types can only be used in uniform variables or function parameters: v_1
-ERROR: 0:9: '=' :  cannot convert from ' uniform highp sampler2DArrayShadow' to ' temp highp sampler2DArrayShadow'
-ERROR: 0:9: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
 #version 310 es
 
 
@@ -60,8 +40,7 @@
 uniform highp sampler2DArrayShadow arg_0;
 layout(location = 0) flat out uvec2 vertex_main_loc0_Output;
 uvec2 textureDimensions_eafe19() {
-  highp sampler2DArrayShadow v = arg_0;
-  uvec2 res = uvec2(textureSize(v, int(1u)).xy);
+  uvec2 res = uvec2(textureSize(arg_0, int(1u)).xy);
   return res;
 }
 VertexOutput vertex_main_inner() {
@@ -71,20 +50,10 @@
   return tint_symbol;
 }
 void main() {
-  VertexOutput v_1 = vertex_main_inner();
-  gl_Position = v_1.pos;
+  VertexOutput v = vertex_main_inner();
+  gl_Position = v.pos;
   gl_Position[1u] = -(gl_Position.y);
   gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
-  vertex_main_loc0_Output = v_1.prevent_dce;
+  vertex_main_loc0_Output = v.prevent_dce;
   gl_PointSize = 1.0f;
 }
-error: Error parsing GLSL shader:
-ERROR: 0:12: 'sampler2DArrayShadow' : sampler/image types can only be used in uniform variables or function parameters: v
-ERROR: 0:12: '=' :  cannot convert from ' uniform highp sampler2DArrayShadow' to ' temp highp sampler2DArrayShadow'
-ERROR: 0:12: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
-
-tint executable returned error: exit status 1
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.dxc.hlsl
index 5c4343d..93593fa1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_fdf6e9() {
-  Texture2DArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_fdf6e9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.fxc.hlsl
index 5c4343d..93593fa1 100644
--- a/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureDimensions/fdf6e9.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 uint2 textureDimensions_fdf6e9() {
-  Texture2DArray<int4> v = arg_0;
-  uint4 v_1 = (0u).xxxx;
-  v.GetDimensions(uint(int(1)), v_1[0u], v_1[1u], v_1[2u], v_1[3u]);
-  uint2 res = v_1.xy;
+  uint4 v = (0u).xxxx;
+  arg_0.GetDimensions(uint(int(1)), v[0u], v[1u], v[2u], v[3u]);
+  uint2 res = v.xy;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureDimensions_fdf6e9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.dxc.hlsl
index 84d6e17..0d783a3 100644
--- a/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_04fa78() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_04fa78();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.fxc.hlsl
index 84d6e17..0d783a3 100644
--- a/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/04fa78.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_04fa78() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_04fa78();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.dxc.hlsl
index 62c1bbd..855048e 100644
--- a/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_17baac() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_17baac();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.fxc.hlsl
index 62c1bbd..855048e 100644
--- a/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/17baac.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_17baac() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_17baac();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.dxc.hlsl
index c2d8198..58f37dc 100644
--- a/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_1bf0ab() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_1bf0ab();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.fxc.hlsl
index c2d8198..58f37dc 100644
--- a/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/1bf0ab.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_1bf0ab() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_1bf0ab();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.dxc.hlsl
index 66fdc3b..b84c32a 100644
--- a/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_22e930() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_22e930();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.fxc.hlsl
index 66fdc3b..b84c32a 100644
--- a/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/22e930.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_22e930() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_22e930();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.dxc.hlsl
index 4bf8623..2442d1c 100644
--- a/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_238ec4() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_238ec4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.fxc.hlsl
index 4bf8623..2442d1c 100644
--- a/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/238ec4.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_238ec4() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_238ec4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.dxc.hlsl
index 0f5c7e6..9fe1179 100644
--- a/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_24b0bd() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_24b0bd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.fxc.hlsl
index 0f5c7e6..9fe1179 100644
--- a/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/24b0bd.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_24b0bd() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_24b0bd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.dxc.hlsl
index ef58ca3..511d6d7 100644
--- a/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_269250() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_269250();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.fxc.hlsl
index ef58ca3..511d6d7 100644
--- a/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/269250.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_269250() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_269250();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.dxc.hlsl
index 158e2d7..5834778 100644
--- a/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_2a4f40() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_2a4f40();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.fxc.hlsl
index 158e2d7..5834778 100644
--- a/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/2a4f40.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_2a4f40() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_2a4f40();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.dxc.hlsl
index a9be677..db3cec7 100644
--- a/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_2cc066() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_2cc066();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.fxc.hlsl
index a9be677..db3cec7 100644
--- a/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/2cc066.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_2cc066() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_2cc066();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.dxc.hlsl
index 90daacf..cd7cbf8 100644
--- a/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_43025d() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_0.Gather(arg_1, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_43025d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.fxc.hlsl
index 90daacf..cd7cbf8 100644
--- a/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/43025d.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_43025d() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_0.Gather(arg_1, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_43025d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.dxc.hlsl
index c706fdd..9af8561 100644
--- a/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_445793() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_445793();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.fxc.hlsl
index c706fdd..9af8561 100644
--- a/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/445793.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_445793() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_445793();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.dxc.hlsl
index 5899d95..30690c8 100644
--- a/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_4b8103() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_4b8103();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.fxc.hlsl
index 5899d95..30690c8 100644
--- a/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/4b8103.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_4b8103() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_4b8103();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.dxc.hlsl
index c1555f4..5d284c5 100644
--- a/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_4e8ac5() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_4e8ac5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.fxc.hlsl
index c1555f4..5d284c5 100644
--- a/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/4e8ac5.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_4e8ac5() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_4e8ac5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.dxc.hlsl
index ba0f0e8..57c4743 100644
--- a/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_59372a() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_59372a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.fxc.hlsl
index ba0f0e8..57c4743 100644
--- a/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/59372a.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_59372a() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_59372a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.dxc.hlsl
index 3f9bc74..c1c9afc 100644
--- a/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_6b7b74() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_6b7b74();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.fxc.hlsl
index 3f9bc74..c1c9afc 100644
--- a/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/6b7b74.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_6b7b74() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_6b7b74();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.dxc.hlsl
index b8a36c1..03ca6b3 100644
--- a/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_751f8a() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_751f8a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.fxc.hlsl
index b8a36c1..03ca6b3 100644
--- a/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/751f8a.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_751f8a() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_751f8a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.dxc.hlsl
index ad6c131..29dcf4c 100644
--- a/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_788010() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_788010();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.fxc.hlsl
index ad6c131..29dcf4c 100644
--- a/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/788010.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_788010() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_788010();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.dxc.hlsl
index ab12f31..a3a227d 100644
--- a/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_7dd226() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_0.Gather(arg_1, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_7dd226();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.fxc.hlsl
index ab12f31..a3a227d 100644
--- a/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/7dd226.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_7dd226() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_0.Gather(arg_1, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_7dd226();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.dxc.hlsl
index bdd6e69..9c2990f 100644
--- a/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_829357() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_829357();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.fxc.hlsl
index bdd6e69..9c2990f 100644
--- a/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/829357.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_829357() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_829357();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.dxc.hlsl
index f532b63..60abbb9 100644
--- a/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_831549() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_831549();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.fxc.hlsl
index f532b63..60abbb9 100644
--- a/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/831549.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_831549() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_831549();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.dxc.hlsl
index f6cc224..07acdbc 100644
--- a/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_8578bc() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_8578bc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.fxc.hlsl
index f6cc224..07acdbc 100644
--- a/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/8578bc.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_8578bc() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_8578bc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.dxc.hlsl
index 64830fd..2520b84 100644
--- a/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_8b754c() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_8b754c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.fxc.hlsl
index 64830fd..2520b84 100644
--- a/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/8b754c.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_8b754c() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_8b754c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.dxc.hlsl
index bf69bdd..c518ebd 100644
--- a/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_92ea47() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_92ea47();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.fxc.hlsl
index bf69bdd..c518ebd 100644
--- a/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/92ea47.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_92ea47() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_92ea47();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.dxc.hlsl
index 9defd83..a30ecb8 100644
--- a/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_9a6358() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_9a6358();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.fxc.hlsl
index 9defd83..a30ecb8 100644
--- a/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/9a6358.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_9a6358() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_9a6358();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.dxc.hlsl
index d21841a..f881dad 100644
--- a/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_9ab41e() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_9ab41e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.fxc.hlsl
index d21841a..f881dad 100644
--- a/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/9ab41e.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_9ab41e() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_9ab41e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.dxc.hlsl
index 041f1fd..0634b16 100644
--- a/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_a0372b() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_a0372b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.fxc.hlsl
index 041f1fd..0634b16 100644
--- a/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/a0372b.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_a0372b() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_a0372b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.dxc.hlsl
index 41ebb50..40d9ee3 100644
--- a/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_a68027() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_a68027();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.fxc.hlsl
index 41ebb50..40d9ee3 100644
--- a/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/a68027.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_a68027() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_a68027();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.dxc.hlsl
index 4d79613..bd2b2f3 100644
--- a/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_aaf6bd() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_aaf6bd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.fxc.hlsl
index 4d79613..bd2b2f3 100644
--- a/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/aaf6bd.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_aaf6bd() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_aaf6bd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.dxc.hlsl
index 7650d00..31462ec 100644
--- a/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_bd33b6() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_bd33b6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.fxc.hlsl
index 7650d00..31462ec 100644
--- a/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/bd33b6.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_bd33b6() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_bd33b6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.dxc.hlsl
index b66a4f8..dc38ecf 100644
--- a/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_be276f() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_be276f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.fxc.hlsl
index b66a4f8..dc38ecf 100644
--- a/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/be276f.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_be276f() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_be276f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.dxc.hlsl
index af5af7c..5da14f6 100644
--- a/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_c0640c() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_c0640c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.fxc.hlsl
index af5af7c..5da14f6 100644
--- a/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/c0640c.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_c0640c() {
-  TextureCubeArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  int4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_c0640c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.dxc.hlsl
index ee6934c..e030f91 100644
--- a/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_ce5578() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_ce5578();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.fxc.hlsl
index ee6934c..e030f91 100644
--- a/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/ce5578.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_ce5578() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_ce5578();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.dxc.hlsl
index eed3021..9275045 100644
--- a/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_cf9112() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_cf9112();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.fxc.hlsl
index eed3021..9275045 100644
--- a/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/cf9112.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_cf9112() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_cf9112();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.dxc.hlsl
index de3e425..66d10af 100644
--- a/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_d1f187() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d1f187();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.fxc.hlsl
index de3e425..66d10af 100644
--- a/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d1f187.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_d1f187() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d1f187();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.dxc.hlsl
index dbd8bb1..3ba8721 100644
--- a/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_d4b5c6() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d4b5c6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.fxc.hlsl
index dbd8bb1..3ba8721 100644
--- a/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d4b5c6.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_d4b5c6() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d4b5c6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.dxc.hlsl
index 4158ea5..bf19c7f 100644
--- a/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_d90605() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d90605();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.fxc.hlsl
index 4158ea5..bf19c7f 100644
--- a/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d90605.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureGather_d90605() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Gather(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_0.Gather(arg_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d90605();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.dxc.hlsl
index 234275e..ea2e709 100644
--- a/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_d98d59() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d98d59();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.fxc.hlsl
index 234275e..ea2e709 100644
--- a/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/d98d59.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_d98d59() {
-  TextureCubeArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_d98d59();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.dxc.hlsl
index 5a257da..2e4cfcd 100644
--- a/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_e2acac() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_e2acac();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.fxc.hlsl
index 5a257da..2e4cfcd 100644
--- a/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/e2acac.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_e2acac() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(1u)));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_e2acac();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.dxc.hlsl
index 34d0183..5572798 100644
--- a/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_e3165f() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_e3165f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.fxc.hlsl
index 34d0183..5572798 100644
--- a/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/e3165f.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_e3165f() {
-  Texture2DArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  uint4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_e3165f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.dxc.hlsl
index e9818fe..f51b205 100644
--- a/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_e9d390() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_e9d390();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.fxc.hlsl
index e9818fe..f51b205 100644
--- a/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/e9d390.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<int4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 int4 textureGather_e9d390() {
-  Texture2DArray<int4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  int4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  int4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_e9d390();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.dxc.hlsl
index 06f5c9f..52bcb47 100644
--- a/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_ea8eb4() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_ea8eb4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.fxc.hlsl
index 06f5c9f..52bcb47 100644
--- a/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/ea8eb4.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 float4 textureGather_ea8eb4() {
-  Texture2DArray<float4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  float4 res = v.GatherGreen(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_1.GatherGreen(arg_2, float3((1.0f).xx, float(1u)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_ea8eb4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.dxc.hlsl
index 13f1676..dbde3a4 100644
--- a/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_f2c6e3() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_f2c6e3();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.fxc.hlsl
index 13f1676..dbde3a4 100644
--- a/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGather/f2c6e3.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<uint4> arg_1 : register(t1, space1);
 SamplerState arg_2 : register(s2, space1);
 uint4 textureGather_f2c6e3() {
-  TextureCubeArray<uint4> v = arg_1;
-  SamplerState v_1 = arg_2;
-  uint4 res = v.GatherGreen(v_1, float4((1.0f).xxx, float(int(1))));
+  uint4 res = arg_1.GatherGreen(arg_2, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGather_f2c6e3();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.dxc.hlsl
index 761f32b..faa7e75 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_144a9a() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_144a9a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.fxc.hlsl
index 761f32b..faa7e75 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/144a9a.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_144a9a() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_144a9a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.dxc.hlsl
index c3afe30..acb0603 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_2e409c() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_2e409c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.fxc.hlsl
index c3afe30..acb0603 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/2e409c.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_2e409c() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_2e409c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.dxc.hlsl
index 2cd55bc..40b70e0 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_60d2d1() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_60d2d1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.fxc.hlsl
index 2cd55bc..40b70e0 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/60d2d1.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_60d2d1() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_60d2d1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.dxc.hlsl
index f305409..1e1513c 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_783e65() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_783e65();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.fxc.hlsl
index f305409..1e1513c 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/783e65.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_783e65() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_783e65();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.dxc.hlsl
index da8e5c2..4d6fada 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_b5bc43() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_b5bc43();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.fxc.hlsl
index da8e5c2..4d6fada 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/b5bc43.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_b5bc43() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_b5bc43();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.dxc.hlsl
index 913e2ba..893be4f 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_f585cc() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_f585cc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.fxc.hlsl
index 913e2ba..893be4f 100644
--- a/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureGatherCompare/f585cc.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float4 textureGatherCompare_f585cc() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float4 res = v.GatherCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float4 res = arg_0.GatherCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureGatherCompare_f585cc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.dxc.hlsl
index bd60a13..a30ebcd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_012e11() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.fxc.hlsl
index bd60a13..a30ebcd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/012e11.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_012e11() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.dxc.hlsl
index af3c3ee..c8e9b8d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_019da0() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((int(1)).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_019da0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.fxc.hlsl
index af3c3ee..c8e9b8d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/019da0.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_019da0() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((int(1)).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_019da0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.dxc.hlsl
index 11dc678..8b05b80 100644
--- a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_01cd01() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.fxc.hlsl
index 11dc678..8b05b80 100644
--- a/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/01cd01.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_01cd01() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.dxc.hlsl
index 0d139c4..9b098fc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_026217() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_026217();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.fxc.hlsl
index 0d139c4..9b098fc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/026217.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_026217() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_026217();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.dxc.hlsl
index a7d1580..df9d2ee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_02c48d() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.fxc.hlsl
index a7d1580..df9d2ee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/02c48d.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_02c48d() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.dxc.hlsl
index 95122a7..517dd03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_02ef1f() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.fxc.hlsl
index 95122a7..517dd03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/02ef1f.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_02ef1f() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.dxc.hlsl
index c2e4995..21433a6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_03e03e() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.fxc.hlsl
index c2e4995..21433a6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/03e03e.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_03e03e() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.dxc.hlsl
index 4860a39..cc2b199 100644
--- a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_045ec9() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_045ec9();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.fxc.hlsl
index 4860a39..cc2b199 100644
--- a/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/045ec9.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_045ec9() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_045ec9();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.dxc.hlsl
index 8e33fe2..24c5e7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_04b911() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_04b911();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.fxc.hlsl
index 8e33fe2..24c5e7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/04b911.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_04b911() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_04b911();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.dxc.hlsl
index 108a1cf..4cdd220 100644
--- a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_050c33() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_050c33();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.fxc.hlsl
index 108a1cf..4cdd220 100644
--- a/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/050c33.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_050c33() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_050c33();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.dxc.hlsl
index e8f056c..c874277 100644
--- a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_054350() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.fxc.hlsl
index e8f056c..c874277 100644
--- a/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/054350.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_054350() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.dxc.hlsl
index b6bd0c3..4981e52 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_0674b1() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_0674b1();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.fxc.hlsl
index b6bd0c3..4981e52 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/0674b1.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_0674b1() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_0674b1();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.dxc.hlsl
index 6d08b5b..d30de2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_06ac37() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_06ac37();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.fxc.hlsl
index 6d08b5b..d30de2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/06ac37.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_06ac37() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_06ac37();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.dxc.hlsl
index 09b5383..c7bae12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_072e26() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_072e26();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.fxc.hlsl
index 09b5383..c7bae12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/072e26.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_072e26() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_072e26();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.dxc.hlsl
index 7a95163..2e3ca23 100644
--- a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_078bc4() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_078bc4();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.fxc.hlsl
index 7a95163..2e3ca23 100644
--- a/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/078bc4.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_078bc4() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_078bc4();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.dxc.hlsl
index 0eaeb73..af59a5b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_0b515a() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.fxc.hlsl
index 0eaeb73..af59a5b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/0b515a.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_0b515a() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.dxc.hlsl
index 24b63fe..b0a493e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_0cb698() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(1u);
-  int4 res = int4(v.Load(int2(v_1, int(1u))));
+  int v = int(1u);
+  int4 res = int4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_0cb698();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.fxc.hlsl
index 24b63fe..b0a493e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/0cb698.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_0cb698() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(1u);
-  int4 res = int4(v.Load(int2(v_1, int(1u))));
+  int v = int(1u);
+  int4 res = int4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_0cb698();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.dxc.hlsl
index 92e3d54..29ef61c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_10db82() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_10db82();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.fxc.hlsl
index 92e3d54..29ef61c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/10db82.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_10db82() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_10db82();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.dxc.hlsl
index c54a114..13c0e5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_126466() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.fxc.hlsl
index c54a114..13c0e5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/126466.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_126466() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.dxc.hlsl
index 120d45b..2774eaa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_127e12() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_127e12();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.fxc.hlsl
index 120d45b..2774eaa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/127e12.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_127e12() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_127e12();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.dxc.hlsl
index 00fdd47..72fdaad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1373dc() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(1u);
-  float4 res = float4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(1u);
+  float4 res = float4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1373dc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.fxc.hlsl
index 00fdd47..72fdaad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1373dc.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1373dc() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(1u);
-  float4 res = float4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(1u);
+  float4 res = float4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1373dc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.dxc.hlsl
index b93cc89..1824d29 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_13d539() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_13d539();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.fxc.hlsl
index b93cc89..1824d29 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/13d539.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_13d539() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_13d539();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.dxc.hlsl
index 77fb3c9..2086c8e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_13e90c() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_13e90c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.fxc.hlsl
index 77fb3c9..2086c8e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/13e90c.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_13e90c() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_13e90c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.dxc.hlsl
index 8a02ec9..5693a0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_143d84() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_143d84();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.fxc.hlsl
index 8a02ec9..5693a0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/143d84.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_143d84() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_143d84();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.dxc.hlsl
index 1fc6b7d..7c32a03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_1471b8() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1471b8();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.fxc.hlsl
index 1fc6b7d..7c32a03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1471b8.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_1471b8() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1471b8();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.dxc.hlsl
index 00a8bde..23a82e1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_14cc4c() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.fxc.hlsl
index 00a8bde..23a82e1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/14cc4c.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_14cc4c() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.dxc.hlsl
index 1893cc6..ef26ba8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1561a7() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1561a7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.fxc.hlsl
index 1893cc6..ef26ba8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1561a7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1561a7() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1561a7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.dxc.hlsl
index 1d4a663..49bbf79 100644
--- a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_15e675() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_15e675();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.fxc.hlsl
index 1d4a663..49bbf79 100644
--- a/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/15e675.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_15e675() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_15e675();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.dxc.hlsl
index 4c79744..6a38654 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_1619bf() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.fxc.hlsl
index 4c79744..6a38654 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1619bf.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_1619bf() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.dxc.hlsl
index 6f49b07..5b894b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_168dc8() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_168dc8();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.fxc.hlsl
index 6f49b07..5b894b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/168dc8.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_168dc8() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_168dc8();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.dxc.hlsl
index 56e10e1..e24fb8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_170593() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.fxc.hlsl
index 56e10e1..e24fb8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/170593.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_170593() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.dxc.hlsl
index cd01da1..4e94659 100644
--- a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_17095b() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.fxc.hlsl
index cd01da1..4e94659 100644
--- a/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/17095b.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_17095b() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.dxc.hlsl
index ba8bca2..9700e5b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_18ac11() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_18ac11();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.fxc.hlsl
index ba8bca2..9700e5b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/18ac11.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_18ac11() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_18ac11();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.dxc.hlsl
index 3cc0182..68a08fe3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_19cf87() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(int3(v_1, int(int(1)))).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(int3(v, int(int(1)))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_19cf87();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.fxc.hlsl
index 3cc0182..68a08fe3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/19cf87.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_19cf87() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(int3(v_1, int(int(1)))).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(int3(v, int(int(1)))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_19cf87();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.dxc.hlsl
index 2bb56bd..b0299c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_19d6be() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.fxc.hlsl
index 2bb56bd..b0299c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/19d6be.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_19d6be() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.dxc.hlsl
index 5f29835..4f4870b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_19e5ca() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_19e5ca();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.fxc.hlsl
index 5f29835..4f4870b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/19e5ca.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_19e5ca() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_19e5ca();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.dxc.hlsl
index 286265d..46055ce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1a062f() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1a062f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.fxc.hlsl
index 286265d..46055ce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a062f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1a062f() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1a062f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.dxc.hlsl
index 73452c8..c57ea44 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1a8452() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1a8452();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.fxc.hlsl
index 73452c8..c57ea44 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1a8452.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1a8452() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1a8452();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.dxc.hlsl
index 95c6f1c..4b40e6e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_1aa950() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1aa950();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.fxc.hlsl
index 95c6f1c..4b40e6e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1aa950.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_1aa950() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1aa950();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.dxc.hlsl
index 6d906af..5759fc8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1b051f() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1b051f();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.fxc.hlsl
index 6d906af..5759fc8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b051f.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1b051f() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1b051f();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.dxc.hlsl
index f0449ca..250cb2b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_1b4332() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.fxc.hlsl
index f0449ca..250cb2b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b4332.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_1b4332() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.dxc.hlsl
index 6ea0986..7d79aa7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1b8588() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(int(1));
-  uint4 res = uint4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(int(1));
+  uint4 res = uint4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1b8588();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.fxc.hlsl
index 6ea0986..7d79aa7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1b8588.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1b8588() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(int(1));
-  uint4 res = uint4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(int(1));
+  uint4 res = uint4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1b8588();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.dxc.hlsl
index bef8608..24d6f90 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_1bc5ab() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.fxc.hlsl
index bef8608..24d6f90 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bc5ab.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_1bc5ab() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.dxc.hlsl
index 418b1ab..a0db84c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.dxc.hlsl
@@ -144,10 +144,8 @@
 }
 
 float4 textureLoad_1bfdfb() {
-  Texture2D<float4> v_62 = arg_0_plane0;
-  Texture2D<float4> v_63 = arg_0_plane1;
-  tint_ExternalTextureParams v_64 = v_39(0u);
-  float4 res = tint_TextureLoadExternal(v_62, v_63, v_64, (1u).xx);
+  tint_ExternalTextureParams v_62 = v_39(0u);
+  float4 res = tint_TextureLoadExternal(arg_0_plane0, arg_0_plane1, v_62, (1u).xx);
   return res;
 }
 
@@ -164,15 +162,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1bfdfb();
-  VertexOutput v_65 = tint_symbol;
-  return v_65;
+  VertexOutput v_63 = tint_symbol;
+  return v_63;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_66 = vertex_main_inner();
-  VertexOutput v_67 = v_66;
-  VertexOutput v_68 = v_66;
-  vertex_main_outputs v_69 = {v_68.prevent_dce, v_67.pos};
-  return v_69;
+  VertexOutput v_64 = vertex_main_inner();
+  VertexOutput v_65 = v_64;
+  VertexOutput v_66 = v_64;
+  vertex_main_outputs v_67 = {v_66.prevent_dce, v_65.pos};
+  return v_67;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.fxc.hlsl
index 418b1ab..a0db84c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.ir.fxc.hlsl
@@ -144,10 +144,8 @@
 }
 
 float4 textureLoad_1bfdfb() {
-  Texture2D<float4> v_62 = arg_0_plane0;
-  Texture2D<float4> v_63 = arg_0_plane1;
-  tint_ExternalTextureParams v_64 = v_39(0u);
-  float4 res = tint_TextureLoadExternal(v_62, v_63, v_64, (1u).xx);
+  tint_ExternalTextureParams v_62 = v_39(0u);
+  float4 res = tint_TextureLoadExternal(arg_0_plane0, arg_0_plane1, v_62, (1u).xx);
   return res;
 }
 
@@ -164,15 +162,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1bfdfb();
-  VertexOutput v_65 = tint_symbol;
-  return v_65;
+  VertexOutput v_63 = tint_symbol;
+  return v_63;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_66 = vertex_main_inner();
-  VertexOutput v_67 = v_66;
-  VertexOutput v_68 = v_66;
-  vertex_main_outputs v_69 = {v_68.prevent_dce, v_67.pos};
-  return v_69;
+  VertexOutput v_64 = vertex_main_inner();
+  VertexOutput v_65 = v_64;
+  VertexOutput v_66 = v_64;
+  vertex_main_outputs v_67 = {v_66.prevent_dce, v_65.pos};
+  return v_67;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.dxc.hlsl
index c7fe21b..79406cb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1c562a() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((1u).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1c562a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.fxc.hlsl
index c7fe21b..79406cb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1c562a.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_1c562a() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((1u).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1c562a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.dxc.hlsl
index 6670d24..eb20ef7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_1d43ae() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.fxc.hlsl
index 6670d24..eb20ef7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1d43ae.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_1d43ae() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.dxc.hlsl
index 98fadc4..012f1d5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_1e6baa() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.fxc.hlsl
index 98fadc4..012f1d5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1e6baa.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_1e6baa() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.dxc.hlsl
index e670a52..60b8739 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1eb93f() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1eb93f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.fxc.hlsl
index e670a52..60b8739 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1eb93f.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1eb93f() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1eb93f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.dxc.hlsl
index 66719e1..f9be206 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1f2016() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((int(1)).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1f2016();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.fxc.hlsl
index 66719e1..f9be206 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1f2016.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_1f2016() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((int(1)).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_1f2016();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.dxc.hlsl
index 68bbec3..ce16e12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_1fde63() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.fxc.hlsl
index 68bbec3..ce16e12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1fde63.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_1fde63() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.dxc.hlsl
index 4a394d3..8655a0a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_206a08() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_206a08();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.fxc.hlsl
index 4a394d3..8655a0a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/206a08.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_206a08() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_206a08();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.dxc.hlsl
index c3dc81f..b799df9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_20fa2f() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_20fa2f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.fxc.hlsl
index c3dc81f..b799df9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/20fa2f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_20fa2f() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_20fa2f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.dxc.hlsl
index 45a7647..7ed3bcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_216c37() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(1u);
-  uint4 res = uint4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(1u);
+  uint4 res = uint4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_216c37();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.fxc.hlsl
index 45a7647..7ed3bcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/216c37.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_216c37() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(1u);
-  uint4 res = uint4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(1u);
+  uint4 res = uint4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_216c37();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.dxc.hlsl
index 88778c0..eafc33c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_21d1c4() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((1u).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_21d1c4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.fxc.hlsl
index 88778c0..eafc33c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/21d1c4.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_21d1c4() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((1u).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_21d1c4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.dxc.hlsl
index 1127d08..6bf9510 100644
--- a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_223246() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((1u).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_223246();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.fxc.hlsl
index 1127d08..6bf9510 100644
--- a/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/223246.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_223246() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((1u).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_223246();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.dxc.hlsl
index 3f1a113..44727fc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_22e963() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_22e963();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.fxc.hlsl
index 3f1a113..44727fc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/22e963.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_22e963() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_22e963();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.dxc.hlsl
index 86b040f..850a306 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_23007a() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_23007a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.fxc.hlsl
index 86b040f..850a306 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/23007a.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_23007a() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_23007a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.dxc.hlsl
index 0a4db21..6bc8597 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2363be() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2363be();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.fxc.hlsl
index 0a4db21..6bc8597 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2363be.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2363be() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2363be();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.dxc.hlsl
index 3a723ee..a9eeed8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_23ff89() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_23ff89();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.fxc.hlsl
index 3a723ee..a9eeed8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/23ff89.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_23ff89() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_23ff89();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.dxc.hlsl
index e55070c..cabaf4a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_25b67f() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.fxc.hlsl
index e55070c..cabaf4a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/25b67f.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_25b67f() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.dxc.hlsl
index 471a59c..699e0d9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_26b8f6() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.fxc.hlsl
index 471a59c..699e0d9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/26b8f6.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_26b8f6() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.dxc.hlsl
index 14b446d..aa3a6b5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_26c4f8() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_26c4f8();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.fxc.hlsl
index 14b446d..aa3a6b5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/26c4f8.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_26c4f8() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_26c4f8();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.dxc.hlsl
index 821e8c1..bb01713 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_26d7f1() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_26d7f1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.fxc.hlsl
index 821e8c1..bb01713 100644
--- a/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/26d7f1.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_26d7f1() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_26d7f1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.dxc.hlsl
index 50a9c59..e6fb891 100644
--- a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_272e7a() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.fxc.hlsl
index 50a9c59..e6fb891 100644
--- a/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/272e7a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_272e7a() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.dxc.hlsl
index b7acccf..b828ab2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_276643() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_276643();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.fxc.hlsl
index b7acccf..b828ab2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/276643.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_276643() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_276643();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.dxc.hlsl
index 75052b8..7d12dab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_276a2c() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_276a2c();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.fxc.hlsl
index 75052b8..7d12dab 100644
--- a/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/276a2c.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_276a2c() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_276a2c();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.dxc.hlsl
index 20a01c8..2bc123b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2887d7() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2887d7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.fxc.hlsl
index 20a01c8..2bc123b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2887d7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2887d7() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2887d7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.dxc.hlsl
index 2185efd..32f43d5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2a82d9() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2a82d9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.fxc.hlsl
index 2185efd..32f43d5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2a82d9.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2a82d9() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2a82d9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.dxc.hlsl
index f9f91db..80c8f53 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2ae485() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2ae485();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.fxc.hlsl
index f9f91db..80c8f53 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2ae485.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2ae485() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2ae485();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.dxc.hlsl
index 55d0a9d..ecb56da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2c72ae() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2c72ae();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.fxc.hlsl
index 55d0a9d..ecb56da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2c72ae.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2c72ae() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2c72ae();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.dxc.hlsl
index 0b743b9..1e00ded 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_2cee30() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.fxc.hlsl
index 0b743b9..1e00ded 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2cee30.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_2cee30() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.dxc.hlsl
index d951455..7af04aa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2d479c() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2d479c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.fxc.hlsl
index d951455..7af04aa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d479c.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2d479c() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2d479c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.dxc.hlsl
index f9609fe..928ce7c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2d6cf7() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2d6cf7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.fxc.hlsl
index f9609fe..928ce7c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2d6cf7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_2d6cf7() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2d6cf7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.dxc.hlsl
index f992b35..7f16bb3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_2dbfc2() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.fxc.hlsl
index f992b35..7f16bb3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2dbfc2.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_2dbfc2() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.dxc.hlsl
index 780c661..dfd4e3b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2e09aa() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(v_1, int(1u)));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2e09aa();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.fxc.hlsl
index 780c661..dfd4e3b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e09aa.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2e09aa() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(v_1, int(1u)));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2e09aa();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.dxc.hlsl
index 8b2c873..42c4fd7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2e3552() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2e3552();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.fxc.hlsl
index 8b2c873..42c4fd7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2e3552.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_2e3552() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_2e3552();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.dxc.hlsl
index 30db75d..4a31b10 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_2eaf31() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.fxc.hlsl
index 30db75d..4a31b10 100644
--- a/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/2eaf31.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_2eaf31() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.dxc.hlsl
index c78645c..ccf1026 100644
--- a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_313c73() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_313c73();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.fxc.hlsl
index c78645c..ccf1026 100644
--- a/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/313c73.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_313c73() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_313c73();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.dxc.hlsl
index 3b86888..a5651f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_31db4b() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_31db4b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.fxc.hlsl
index 3b86888..a5651f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/31db4b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_31db4b() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_31db4b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.dxc.hlsl
index 08e6afd..3aaba98 100644
--- a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_321210() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_321210();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.fxc.hlsl
index 08e6afd..3aaba98 100644
--- a/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/321210.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_321210() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_321210();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.dxc.hlsl
index 9566ac2..a9f102e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_32a7b8() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.fxc.hlsl
index 9566ac2..a9f102e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/32a7b8.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_32a7b8() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.dxc.hlsl
index fad83a7..715f312 100644
--- a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_33d3aa() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_33d3aa();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.fxc.hlsl
index fad83a7..715f312 100644
--- a/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/33d3aa.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_33d3aa() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_33d3aa();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.dxc.hlsl
index 08ad06f..488f4eb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_348827() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_348827();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.fxc.hlsl
index 08ad06f..488f4eb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/348827.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_348827() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_348827();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.dxc.hlsl
index e5ab8c3..d949adf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_34d97c() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.fxc.hlsl
index e5ab8c3..d949adf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/34d97c.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_34d97c() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.dxc.hlsl
index dbc20ae..9b4c9e4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_35a5e2() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.fxc.hlsl
index dbc20ae..9b4c9e4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/35a5e2.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_35a5e2() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.dxc.hlsl
index ed2ff4d..1ae942b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_35d464() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_35d464();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.fxc.hlsl
index ed2ff4d..1ae942b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/35d464.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_35d464() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_35d464();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.dxc.hlsl
index 6962810..efb784a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_374351() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_374351();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.fxc.hlsl
index 6962810..efb784a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/374351.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_374351() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_374351();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.dxc.hlsl
index 85d6db9..0d4b2d0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_388688() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_388688();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.fxc.hlsl
index 85d6db9..0d4b2d0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/388688.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_388688() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_388688();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.dxc.hlsl
index b189df2..0ce0dc1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_38f8ab() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(v_1, int(1u)));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_38f8ab();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.fxc.hlsl
index b189df2..0ce0dc1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/38f8ab.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_38f8ab() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(v_1, int(1u)));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_38f8ab();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.dxc.hlsl
index 4500a42..3de6415 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_39016c() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.fxc.hlsl
index 4500a42..3de6415 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/39016c.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_39016c() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.dxc.hlsl
index 3e83bb1..f583010 100644
--- a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_395447() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.fxc.hlsl
index 3e83bb1..f583010 100644
--- a/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/395447.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_395447() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.dxc.hlsl
index 15d5c6b..8a520f4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_39ef40() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_39ef40();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.fxc.hlsl
index 15d5c6b..8a520f4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/39ef40.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_39ef40() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_39ef40();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.dxc.hlsl
index 553aeb3..b72c7cb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_3a2350() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.fxc.hlsl
index 553aeb3..b72c7cb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3a2350.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_3a2350() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.dxc.hlsl
index 3a65fd4..52781dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_3aea13() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.fxc.hlsl
index 3a65fd4..52781dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3aea13.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_3aea13() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.dxc.hlsl
index f712823..4feb0dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_3bbc2b() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.fxc.hlsl
index f712823..4feb0dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3bbc2b.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_3bbc2b() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.dxc.hlsl
index daecd40..7740dea 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_3c0d9e() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3c0d9e();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.fxc.hlsl
index daecd40..7740dea 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c0d9e.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_3c0d9e() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3c0d9e();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.dxc.hlsl
index 7564e33..e9b1d30 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3c9587() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3c9587();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.fxc.hlsl
index 7564e33..e9b1d30 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c9587.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3c9587() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3c9587();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.dxc.hlsl
index c9cf71c..4d5b2cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3c96e8() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3c96e8();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.fxc.hlsl
index c9cf71c..4d5b2cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3c96e8.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3c96e8() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3c96e8();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.dxc.hlsl
index f2d0015..b6f76cf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_3cfb9c() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.fxc.hlsl
index f2d0015..b6f76cf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3cfb9c.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_3cfb9c() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.dxc.hlsl
index e470884..eadc045 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_3d001b() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3d001b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.fxc.hlsl
index e470884..eadc045 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d001b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_3d001b() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3d001b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.dxc.hlsl
index 252a6aa..8a42b0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_3d3fd1() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3d3fd1();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.fxc.hlsl
index 252a6aa..8a42b0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d3fd1.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_3d3fd1() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3d3fd1();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.dxc.hlsl
index 63c65f2..61cb864 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3d9c90() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3d9c90();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.fxc.hlsl
index 63c65f2..61cb864 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3d9c90.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3d9c90() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3d9c90();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.dxc.hlsl
index 4b7e828..5e85b83 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3da3ed() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(int(1));
-  float4 res = float4(v.Load(int2(v_1, int(1u))));
+  int v = int(int(1));
+  float4 res = float4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3da3ed();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.fxc.hlsl
index 4b7e828..5e85b83 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3da3ed.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3da3ed() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(int(1));
-  float4 res = float4(v.Load(int2(v_1, int(1u))));
+  int v = int(int(1));
+  float4 res = float4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3da3ed();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.dxc.hlsl
index de89777..e00fa1b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_3e16a8() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.fxc.hlsl
index de89777..e00fa1b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e16a8.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_3e16a8() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.dxc.hlsl
index bb46e81..075d41f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3e5f6a() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3e5f6a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.fxc.hlsl
index bb46e81..075d41f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/3e5f6a.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_3e5f6a() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_3e5f6a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.dxc.hlsl
index c7fe507..9269308 100644
--- a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_40ee8b() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.fxc.hlsl
index c7fe507..9269308 100644
--- a/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/40ee8b.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_40ee8b() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.dxc.hlsl
index fdbbb2a..60d19c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_4212a1() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.fxc.hlsl
index fdbbb2a..60d19c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4212a1.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_4212a1() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.dxc.hlsl
index 71e0468..126cdb6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_424afd() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.fxc.hlsl
index 71e0468..126cdb6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/424afd.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_424afd() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.dxc.hlsl
index 0b7ee7c..fbdf233 100644
--- a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_42a631() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.fxc.hlsl
index 0b7ee7c..fbdf233 100644
--- a/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/42a631.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_42a631() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.dxc.hlsl
index 0b10475..c668072 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_43484a() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.fxc.hlsl
index 0b10475..c668072 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/43484a.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_43484a() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.dxc.hlsl
index 9b2c009..69bcc50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_439e2a() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_439e2a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.fxc.hlsl
index 9b2c009..69bcc50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/439e2a.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_439e2a() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_439e2a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.dxc.hlsl
index e900ee2..3f92fce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_43cd86() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.fxc.hlsl
index e900ee2..3f92fce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/43cd86.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_43cd86() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.dxc.hlsl
index 786e4c1..263d368 100644
--- a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_44c826() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_44c826();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.fxc.hlsl
index 786e4c1..263d368 100644
--- a/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/44c826.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_44c826() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_44c826();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.dxc.hlsl
index e2c089b..78a7ced 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4542ae() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.fxc.hlsl
index e2c089b..78a7ced 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4542ae.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4542ae() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.dxc.hlsl
index 007edaa..50d117b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_454347() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_454347();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.fxc.hlsl
index 007edaa..50d117b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/454347.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_454347() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_454347();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.dxc.hlsl
index 52003c1..f398c2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4638a0() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4638a0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.fxc.hlsl
index 52003c1..f398c2f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4638a0.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4638a0() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4638a0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.dxc.hlsl
index 3e13791..f680b40 100644
--- a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_469912() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.fxc.hlsl
index 3e13791..f680b40 100644
--- a/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/469912.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_469912() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.dxc.hlsl
index 636b17b..4ed4f7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_46a93f() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_46a93f();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.fxc.hlsl
index 636b17b..4ed4f7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/46a93f.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_46a93f() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_46a93f();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.dxc.hlsl
index f64015c..6747f1d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_46dbf5() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_46dbf5();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.fxc.hlsl
index f64015c..6747f1d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/46dbf5.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_46dbf5() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_46dbf5();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.dxc.hlsl
index 6214ce7..bce8102 100644
--- a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_473d3e() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.fxc.hlsl
index 6214ce7..bce8102 100644
--- a/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/473d3e.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_473d3e() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.dxc.hlsl
index 9f6b2d4..756ca1e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_47e818() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((1u).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_47e818();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.fxc.hlsl
index 9f6b2d4..756ca1e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/47e818.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_47e818() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((1u).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_47e818();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.dxc.hlsl
index 10c363b..18559a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_482627() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.fxc.hlsl
index 10c363b..18559a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/482627.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_482627() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.dxc.hlsl
index 65bfb2b..a279165 100644
--- a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_484344() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_484344();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.fxc.hlsl
index 65bfb2b..a279165 100644
--- a/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/484344.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_484344() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_484344();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.dxc.hlsl
index d9a8586..0a7f1c4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4951bb() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4951bb();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.fxc.hlsl
index d9a8586..0a7f1c4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4951bb.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4951bb() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4951bb();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.dxc.hlsl
index 0cace65..59e7942 100644
--- a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_49f76f() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(v_1, int(1u)));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_49f76f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.fxc.hlsl
index 0cace65..59e7942 100644
--- a/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/49f76f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_49f76f() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(v_1, int(1u)));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_49f76f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.dxc.hlsl
index e07282e..5658733 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_4a5c55() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.fxc.hlsl
index e07282e..5658733 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4a5c55.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_4a5c55() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.dxc.hlsl
index 48abdc5..a0fb0aa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4acb64() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4acb64();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.fxc.hlsl
index 48abdc5..a0fb0aa 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4acb64.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4acb64() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4acb64();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.dxc.hlsl
index 7cb389a..540f1f4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4c15b2() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.fxc.hlsl
index 7cb389a..540f1f4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c15b2.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4c15b2() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.dxc.hlsl
index 21c73fa..e7bbca4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_4c1a1e() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.fxc.hlsl
index 21c73fa..e7bbca4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c1a1e.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_4c1a1e() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.dxc.hlsl
index a2c5abe..ecbb93d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4c423f() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(1u);
-  int4 res = int4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(1u);
+  int4 res = int4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4c423f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.fxc.hlsl
index a2c5abe..ecbb93d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c423f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4c423f() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(1u);
-  int4 res = int4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(1u);
+  int4 res = int4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4c423f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.dxc.hlsl
index 3b617d8..41b4cbe 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4c67be() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4c67be();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.fxc.hlsl
index 3b617d8..41b4cbe 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4c67be.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4c67be() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4c67be();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.dxc.hlsl
index b2bf17e..17b45c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_4ccf9a() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.fxc.hlsl
index b2bf17e..17b45c6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4ccf9a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_4ccf9a() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.dxc.hlsl
index ab1eb61..e661031 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4cdca5() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4cdca5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.fxc.hlsl
index ab1eb61..e661031 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4cdca5.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4cdca5() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4cdca5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.dxc.hlsl
index 92ca15b..641a5c8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_4db25c() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(v_1, int(1u)).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(v, int(1u)).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4db25c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.fxc.hlsl
index 92ca15b..641a5c8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4db25c.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_4db25c() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(v_1, int(1u)).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(v, int(1u)).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4db25c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.dxc.hlsl
index 99f6af9..462c480 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4e2c5c() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.fxc.hlsl
index 99f6af9..462c480 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4e2c5c.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4e2c5c() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.dxc.hlsl
index 20b1db0..df85245 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_4f5496() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.fxc.hlsl
index 20b1db0..df85245 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f5496.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_4f5496() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.dxc.hlsl
index e4ade0a..264b7f2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4f90bb() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.fxc.hlsl
index e4ade0a..264b7f2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4f90bb.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_4f90bb() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.dxc.hlsl
index 5bf97e1..b8dee78 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4fa6ae() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4fa6ae();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.fxc.hlsl
index 5bf97e1..b8dee78 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fa6ae.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_4fa6ae() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4fa6ae();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.dxc.hlsl
index e25031c..86e6f54 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4fd803() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((int(1)).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4fd803();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.fxc.hlsl
index e25031c..86e6f54 100644
--- a/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/4fd803.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_4fd803() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((int(1)).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_4fd803();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.dxc.hlsl
index 9f05a82..6ce7f1b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_505aa2() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_505aa2();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.fxc.hlsl
index 9f05a82..6ce7f1b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/505aa2.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_505aa2() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_505aa2();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.dxc.hlsl
index 1e5fa1c..4b5d694 100644
--- a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_50915c() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_50915c();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.fxc.hlsl
index 1e5fa1c..4b5d694 100644
--- a/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/50915c.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_50915c() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_50915c();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.dxc.hlsl
index 07dbcc5..db5090f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_5154e1() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.fxc.hlsl
index 07dbcc5..db5090f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5154e1.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_5154e1() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.dxc.hlsl
index 0d80497..f90919b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_519ab5() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_519ab5();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.fxc.hlsl
index 0d80497..f90919b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/519ab5.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_519ab5() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_519ab5();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.dxc.hlsl
index 2e9677c..d053f2e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_53378a() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_53378a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.fxc.hlsl
index 2e9677c..d053f2e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/53378a.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_53378a() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_53378a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.dxc.hlsl
index cf20482..2aa6554 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_53941c() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.fxc.hlsl
index cf20482..2aa6554 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/53941c.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_53941c() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.dxc.hlsl
index bfbcec6..007cee6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_53e142() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_53e142();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.fxc.hlsl
index bfbcec6..007cee6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/53e142.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_53e142() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_53e142();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.dxc.hlsl
index 6d0c18e..bcda68b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_54a59b() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_54a59b();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.fxc.hlsl
index 6d0c18e..bcda68b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/54a59b.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_54a59b() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_54a59b();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.dxc.hlsl
index bc5ecbe..d19f167 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_54e0ce() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_54e0ce();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.fxc.hlsl
index bc5ecbe..d19f167 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/54e0ce.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_54e0ce() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_54e0ce();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.dxc.hlsl
index df11eef..203e04f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_54fb38() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.fxc.hlsl
index df11eef..203e04f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/54fb38.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_54fb38() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.dxc.hlsl
index 779bd04..fa9d588 100644
--- a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_55e745() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_55e745();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.fxc.hlsl
index 779bd04..fa9d588 100644
--- a/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/55e745.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_55e745() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_55e745();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.dxc.hlsl
index 1ab5fae..e4e6104 100644
--- a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_560573() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_560573();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.fxc.hlsl
index 1ab5fae..e4e6104 100644
--- a/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/560573.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_560573() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_560573();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.dxc.hlsl
index 1667d67..f30703c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_56a000() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.fxc.hlsl
index 1667d67..f30703c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/56a000.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_56a000() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.dxc.hlsl
index ec044d7..818603c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_582015() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_582015();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.fxc.hlsl
index ec044d7..818603c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/582015.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_582015() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_582015();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.dxc.hlsl
index 7515647..8895f93 100644
--- a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_589eaa() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_589eaa();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.fxc.hlsl
index 7515647..8895f93 100644
--- a/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/589eaa.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_589eaa() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_589eaa();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.dxc.hlsl
index 944f7dc..62ae91f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_5a2f9d() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(int(1));
-  int4 res = int4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(int(1));
+  int4 res = int4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5a2f9d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.fxc.hlsl
index 944f7dc..62ae91f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5a2f9d.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_5a2f9d() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(int(1));
-  int4 res = int4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(int(1));
+  int4 res = int4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5a2f9d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.dxc.hlsl
index 409e341..40a38df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5abbf2() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5abbf2();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.fxc.hlsl
index 409e341..40a38df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5abbf2.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5abbf2() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5abbf2();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.dxc.hlsl
index 15743af..fcf1f4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_5b0f5b() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.fxc.hlsl
index 15743af..fcf1f4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b0f5b.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_5b0f5b() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.dxc.hlsl
index 42ef932..fc0e5e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_5b4947() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.fxc.hlsl
index 42ef932..fc0e5e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5b4947.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_5b4947() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.dxc.hlsl
index bdf5262..cbeb78c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5bb7fb() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5bb7fb();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.fxc.hlsl
index bdf5262..cbeb78c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5bb7fb.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5bb7fb() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5bb7fb();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.dxc.hlsl
index f63cf7d..35f912b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_5c69f8() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.fxc.hlsl
index f63cf7d..35f912b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5c69f8.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_5c69f8() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.dxc.hlsl
index 231f008..0af0ea9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_5cd3fc() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.fxc.hlsl
index 231f008..0af0ea9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cd3fc.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_5cd3fc() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.dxc.hlsl
index 9bda6f7..2e05c9b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5cee3b() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5cee3b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.fxc.hlsl
index 9bda6f7..2e05c9b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5cee3b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5cee3b() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5cee3b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.dxc.hlsl
index db8052e..dc4f839 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5d0a2f() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5d0a2f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.fxc.hlsl
index db8052e..dc4f839 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d0a2f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5d0a2f() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5d0a2f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.dxc.hlsl
index 49b4d71..51c66a7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5d4042() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5d4042();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.fxc.hlsl
index 49b4d71..51c66a7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5d4042.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5d4042() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5d4042();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.dxc.hlsl
index 666b322..1f2f927 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5dd4c7() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5dd4c7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.fxc.hlsl
index 666b322..1f2f927 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5dd4c7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5dd4c7() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5dd4c7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.dxc.hlsl
index c0cd9a0..6deb3ce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_5e17a7() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.fxc.hlsl
index c0cd9a0..6deb3ce 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e17a7.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_5e17a7() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.dxc.hlsl
index ffc72b5..8726944 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_5e1843() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.fxc.hlsl
index ffc72b5..8726944 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e1843.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_5e1843() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.dxc.hlsl
index 1b5268f..230a8d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_5e8d3f() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5e8d3f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.fxc.hlsl
index 1b5268f..230a8d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5e8d3f.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_5e8d3f() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5e8d3f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.dxc.hlsl
index b8e6ab6..6ca1b08 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5ed6ad() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5ed6ad();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.fxc.hlsl
index b8e6ab6..6ca1b08 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5ed6ad.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5ed6ad() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5ed6ad();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.dxc.hlsl
index ad83d58..c7e6162 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5f4473() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5f4473();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.fxc.hlsl
index ad83d58..c7e6162 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5f4473.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_5f4473() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5f4473();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.dxc.hlsl
index f9e4c0e..f5b0bed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5feb4d() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5feb4d();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.fxc.hlsl
index f9e4c0e..f5b0bed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/5feb4d.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_5feb4d() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_5feb4d();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.dxc.hlsl
index 1c4112c..72127a5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_6154d4() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6154d4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.fxc.hlsl
index 1c4112c..72127a5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6154d4.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_6154d4() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6154d4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.dxc.hlsl
index da2999c..f242a12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_61e2e8() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.fxc.hlsl
index da2999c..f242a12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/61e2e8.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_61e2e8() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.dxc.hlsl
index 676fcfa..0d7e9d9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_620caa() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_620caa();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.fxc.hlsl
index 676fcfa..0d7e9d9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/620caa.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_620caa() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_620caa();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.dxc.hlsl
index 907695c..53a5b62 100644
--- a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_622278() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.fxc.hlsl
index 907695c..53a5b62 100644
--- a/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/622278.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_622278() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.dxc.hlsl
index c7295d5..6e42828 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_6273b1() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(v_1, int(int(1))).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(v, int(int(1))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6273b1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.fxc.hlsl
index c7295d5..6e42828 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6273b1.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_6273b1() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(v_1, int(int(1))).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(v, int(int(1))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6273b1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.dxc.hlsl
index 5c7f518..12fc911 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_62d125() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_62d125();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.fxc.hlsl
index 5c7f518..12fc911 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d125.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_62d125() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_62d125();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.dxc.hlsl
index 5101559..8d82c26 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_62d1de() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(int(1));
-  int4 res = int4(v.Load(int2(v_1, int(1u))));
+  int v = int(int(1));
+  int4 res = int4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_62d1de();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.fxc.hlsl
index 5101559..8d82c26 100644
--- a/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/62d1de.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_62d1de() {
-  Texture1D<int4> v = arg_0;
-  int v_1 = int(int(1));
-  int4 res = int4(v.Load(int2(v_1, int(1u))));
+  int v = int(int(1));
+  int4 res = int4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_62d1de();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.dxc.hlsl
index 6b1335e..2caead0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_639962() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(v_1, int(1u)));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_639962();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.fxc.hlsl
index 6b1335e..2caead0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/639962.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_639962() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(v_1, int(1u)));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_639962();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.dxc.hlsl
index 43ec7d3..3c25d0a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_63be18() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_63be18();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.fxc.hlsl
index 43ec7d3..3c25d0a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/63be18.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_63be18() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_63be18();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.dxc.hlsl
index 9fe156c..c4786e3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_64c372() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.fxc.hlsl
index 9fe156c..c4786e3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/64c372.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_64c372() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.dxc.hlsl
index cc1e4ff..8fb06d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_656d76() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_656d76();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.fxc.hlsl
index cc1e4ff..8fb06d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/656d76.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_656d76() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_656d76();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.dxc.hlsl
index 2d62ddf..9728a45 100644
--- a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_65a4d0() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_65a4d0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.fxc.hlsl
index 2d62ddf..9728a45 100644
--- a/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/65a4d0.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_65a4d0() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_65a4d0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.dxc.hlsl
index c489794..8bb2ddf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_666010() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.fxc.hlsl
index c489794..8bb2ddf 100644
--- a/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/666010.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_666010() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.dxc.hlsl
index ecd66bb..c9e39fe 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_6678b6() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6678b6();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.fxc.hlsl
index ecd66bb..c9e39fe 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6678b6.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_6678b6() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6678b6();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.dxc.hlsl
index 880485c..af246e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_66be47() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_66be47();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.fxc.hlsl
index 880485c..af246e0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/66be47.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_66be47() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_66be47();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.dxc.hlsl
index 4b2be92..738d6d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_67d826() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.fxc.hlsl
index 4b2be92..738d6d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/67d826.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_67d826() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.dxc.hlsl
index eca3a53..3650506 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_67edca() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_67edca();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.fxc.hlsl
index eca3a53..3650506 100644
--- a/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/67edca.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_67edca() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_67edca();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.dxc.hlsl
index 8a8303f..9b9124e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_68d273() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.fxc.hlsl
index 8a8303f..9b9124e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/68d273.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_68d273() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.dxc.hlsl
index 90243db..5a2976c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_6925bc() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(v_1, int(1u)).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(v, int(1u)).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6925bc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.fxc.hlsl
index 90243db..5a2976c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6925bc.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_6925bc() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(v_1, int(1u)).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(v, int(1u)).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6925bc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.dxc.hlsl
index f4889b9..c980e99 100644
--- a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_69fee5() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.fxc.hlsl
index f4889b9..c980e99 100644
--- a/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/69fee5.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_69fee5() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.dxc.hlsl
index a788ebe..63e30f2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6a6871() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.fxc.hlsl
index a788ebe..63e30f2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6a6871.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6a6871() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.dxc.hlsl
index 79b27ba..0848bda 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_6b77d4() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(int(1));
-  uint4 res = uint4(v.Load(int2(v_1, int(1u))));
+  int v = int(int(1));
+  uint4 res = uint4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6b77d4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.fxc.hlsl
index 79b27ba..0848bda 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b77d4.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_6b77d4() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(int(1));
-  uint4 res = uint4(v.Load(int2(v_1, int(1u))));
+  int v = int(int(1));
+  uint4 res = uint4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6b77d4();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.dxc.hlsl
index ca12b3b..c3d6572 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6b8ba6() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.fxc.hlsl
index ca12b3b..c3d6572 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6b8ba6.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6b8ba6() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.dxc.hlsl
index 77a7d78..15e7837 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6ba9ab() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.fxc.hlsl
index 77a7d78..15e7837 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6ba9ab.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6ba9ab() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.dxc.hlsl
index c138da9..e05e61d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6bf3e2() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.fxc.hlsl
index c138da9..e05e61d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf3e2.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6bf3e2() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.dxc.hlsl
index a0c07f1..885bbe2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_6bf4b7() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((int(1)).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6bf4b7();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.fxc.hlsl
index a0c07f1..885bbe2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6bf4b7.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_6bf4b7() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((int(1)).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6bf4b7();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.dxc.hlsl
index dd902af..25d0393 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_6d1fb4() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.fxc.hlsl
index dd902af..25d0393 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d1fb4.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_6d1fb4() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.dxc.hlsl
index 7f79abb..957d5b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_6d376a() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(1u);
-  float4 res = float4(v.Load(int2(v_1, int(1u))));
+  int v = int(1u);
+  float4 res = float4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6d376a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.fxc.hlsl
index 7f79abb..957d5b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d376a.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_6d376a() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(1u);
-  float4 res = float4(v.Load(int2(v_1, int(1u))));
+  int v = int(1u);
+  float4 res = float4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6d376a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.dxc.hlsl
index 9bb2a6e..7c878c2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6d7bb5() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.fxc.hlsl
index 9bb2a6e..7c878c2 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6d7bb5.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6d7bb5() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.dxc.hlsl
index 6ef24b6..d54bb4a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_6e903f() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.fxc.hlsl
index 6ef24b6..d54bb4a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6e903f.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_6e903f() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.dxc.hlsl
index be535f3..8b35961 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_6f0370() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6f0370();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.fxc.hlsl
index be535f3..8b35961 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0370.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_6f0370() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6f0370();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.dxc.hlsl
index d2a8618..a76f5f7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6f0ea8() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.fxc.hlsl
index d2a8618..a76f5f7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f0ea8.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6f0ea8() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.dxc.hlsl
index 7fa9519..c932efd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_6f1750() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6f1750();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.fxc.hlsl
index 7fa9519..c932efd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f1750.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_6f1750() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_6f1750();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.dxc.hlsl
index 92fde11..cc0777e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6f8927() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.fxc.hlsl
index 92fde11..cc0777e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/6f8927.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_6f8927() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.dxc.hlsl
index c243c3a..4768abd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_714471() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_714471();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.fxc.hlsl
index c243c3a..4768abd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/714471.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_714471() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_714471();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.dxc.hlsl
index c67f833..0e7536a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_72bb3c() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_72bb3c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.fxc.hlsl
index c67f833..0e7536a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/72bb3c.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_72bb3c() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_72bb3c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.dxc.hlsl
index cce4c3d..f583959 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_72c9c3() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.fxc.hlsl
index cce4c3d..f583959 100644
--- a/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/72c9c3.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_72c9c3() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.dxc.hlsl
index fe5bcb4..e6e97b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_742f1b() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.fxc.hlsl
index fe5bcb4..e6e97b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/742f1b.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_742f1b() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.dxc.hlsl
index 27ba34a..e07806a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_749704() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_749704();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.fxc.hlsl
index 27ba34a..e07806a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/749704.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_749704() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_749704();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.dxc.hlsl
index 2e026be..bce9552 100644
--- a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_74a387() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.fxc.hlsl
index 2e026be..bce9552 100644
--- a/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/74a387.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_74a387() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.dxc.hlsl
index 8d73a8a..9c42204 100644
--- a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_773c46() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_773c46();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.fxc.hlsl
index 8d73a8a..9c42204 100644
--- a/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/773c46.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_773c46() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_773c46();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.dxc.hlsl
index f8d4f11..91d1d40 100644
--- a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_789045() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_789045();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.fxc.hlsl
index f8d4f11..91d1d40 100644
--- a/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/789045.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_789045() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_789045();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.dxc.hlsl
index 36abd49..1f325e4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_79e697() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_79e697();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.fxc.hlsl
index 36abd49..1f325e4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/79e697.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_79e697() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_79e697();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.dxc.hlsl
index 2964a60..420fb03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_7ab4df() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7ab4df();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.fxc.hlsl
index 2964a60..420fb03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7ab4df.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_7ab4df() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7ab4df();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.dxc.hlsl
index 9275238..e2d36b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_7b63e0() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7b63e0();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.fxc.hlsl
index 9275238..e2d36b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7b63e0.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_7b63e0() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7b63e0();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.dxc.hlsl
index 52ba4a0..f04380e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_7bee94() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(v_1, int(int(1))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7bee94();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.fxc.hlsl
index 52ba4a0..f04380e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7bee94.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_7bee94() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(v_1, int(int(1))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7bee94();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.dxc.hlsl
index 0b09c7b..7232b37 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_7c90e5() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7c90e5();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.fxc.hlsl
index 0b09c7b..7232b37 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7c90e5.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_7c90e5() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7c90e5();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.dxc.hlsl
index f1b9cba..394b3a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_7dab57() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7dab57();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.fxc.hlsl
index f1b9cba..394b3a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dab57.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_7dab57() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7dab57();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.dxc.hlsl
index c010ddf..13c00b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_7dd3d5() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.fxc.hlsl
index c010ddf..13c00b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7dd3d5.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_7dd3d5() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.dxc.hlsl
index 4192df0..67f427e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_7e5cbc() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.fxc.hlsl
index 4192df0..67f427e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7e5cbc.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_7e5cbc() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.dxc.hlsl
index 08fe31c..7b9cabc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_7fd822() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(int3(v_1, int(int(1)))).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(int3(v, int(int(1)))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7fd822();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.fxc.hlsl
index 08fe31c..7b9cabc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/7fd822.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_7fd822() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(int3(v_1, int(int(1)))).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(int3(v, int(int(1)))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_7fd822();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.dxc.hlsl
index 421594b..39c54df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_80dae1() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.fxc.hlsl
index 421594b..39c54df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/80dae1.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_80dae1() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.dxc.hlsl
index 2bd3f67..81dfa8b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_81c381() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(int(1));
-  float4 res = float4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(int(1));
+  float4 res = float4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_81c381();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.fxc.hlsl
index 2bd3f67..81dfa8b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/81c381.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_81c381() {
-  Texture1D<float4> v = arg_0;
-  int v_1 = int(int(1));
-  float4 res = float4(v.Load(int2(v_1, int(int(1)))));
+  int v = int(int(1));
+  float4 res = float4(arg_0.Load(int2(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_81c381();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.dxc.hlsl
index f6cb355..0bff814 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_83162f() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_83162f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.fxc.hlsl
index f6cb355..0bff814 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/83162f.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_83162f() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_83162f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.dxc.hlsl
index 016e4ad..4ec652f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_83cea4() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_83cea4();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.fxc.hlsl
index 016e4ad..4ec652f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/83cea4.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_83cea4() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_83cea4();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.dxc.hlsl
index da87569..60828e7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_83d6e3() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.fxc.hlsl
index da87569..60828e7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/83d6e3.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_83d6e3() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.dxc.hlsl
index 9e15fae..c9b1465 100644
--- a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_848d85() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.fxc.hlsl
index 9e15fae..c9b1465 100644
--- a/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/848d85.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_848d85() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.dxc.hlsl
index fc3036f..be74ecc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_84a438() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.fxc.hlsl
index fc3036f..be74ecc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/84a438.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_84a438() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.dxc.hlsl
index 86b9832..9a92c55 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_84c728() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_84c728();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.fxc.hlsl
index 86b9832..9a92c55 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/84c728.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_84c728() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_84c728();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.dxc.hlsl
index ae47a69..c8f3c8c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_84dee1() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_84dee1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.fxc.hlsl
index ae47a69..c8f3c8c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/84dee1.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_84dee1() {
-  Texture2D<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_84dee1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.dxc.hlsl
index 04fc0d4..2947dae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_8527b1() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8527b1();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.fxc.hlsl
index 04fc0d4..2947dae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8527b1.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_8527b1() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8527b1();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.dxc.hlsl
index 43d0671..ac1a825 100644
--- a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_862833() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_862833();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.fxc.hlsl
index 43d0671..ac1a825 100644
--- a/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/862833.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_862833() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_862833();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.dxc.hlsl
index 42bb677..d720714 100644
--- a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_878e24() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.fxc.hlsl
index 42bb677..d720714 100644
--- a/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/878e24.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_878e24() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.dxc.hlsl
index 26c9a92..963b715 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_87be85() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_87be85();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.fxc.hlsl
index 26c9a92..963b715 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/87be85.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_87be85() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_87be85();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.dxc.hlsl
index 819531b..668aae8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_87f0a6() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.fxc.hlsl
index 819531b..668aae8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/87f0a6.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_87f0a6() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.dxc.hlsl
index ed46dae..e0630b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_881349() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.fxc.hlsl
index ed46dae..e0630b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/881349.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_881349() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.dxc.hlsl
index 396beec..12d18c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_89620b() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_89620b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.fxc.hlsl
index 396beec..12d18c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/89620b.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_89620b() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_89620b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.dxc.hlsl
index 4340d33..049c50e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_897cf3() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_897cf3();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.fxc.hlsl
index 4340d33..049c50e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/897cf3.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_897cf3() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_897cf3();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.dxc.hlsl
index eb36401..2ed2c5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_8a291b() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8a291b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.fxc.hlsl
index eb36401..2ed2c5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a291b.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_8a291b() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8a291b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.dxc.hlsl
index 09171d1..55e8ccb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_8a9988() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8a9988();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.fxc.hlsl
index 09171d1..55e8ccb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8a9988.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_8a9988() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8a9988();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.dxc.hlsl
index 391037b4..c8dcc12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.dxc.hlsl
@@ -144,11 +144,9 @@
 }
 
 float4 textureLoad_8acf41() {
-  Texture2D<float4> v_62 = arg_0_plane0;
-  Texture2D<float4> v_63 = arg_0_plane1;
-  tint_ExternalTextureParams v_64 = v_39(0u);
-  tint_ExternalTextureParams v_65 = v_64;
-  float4 res = tint_TextureLoadExternal(v_62, v_63, v_65, uint2((int(1)).xx));
+  tint_ExternalTextureParams v_62 = v_39(0u);
+  tint_ExternalTextureParams v_63 = v_62;
+  float4 res = tint_TextureLoadExternal(arg_0_plane0, arg_0_plane1, v_63, uint2((int(1)).xx));
   return res;
 }
 
@@ -165,15 +163,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8acf41();
-  VertexOutput v_66 = tint_symbol;
-  return v_66;
+  VertexOutput v_64 = tint_symbol;
+  return v_64;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_67 = vertex_main_inner();
-  VertexOutput v_68 = v_67;
-  VertexOutput v_69 = v_67;
-  vertex_main_outputs v_70 = {v_69.prevent_dce, v_68.pos};
-  return v_70;
+  VertexOutput v_65 = vertex_main_inner();
+  VertexOutput v_66 = v_65;
+  VertexOutput v_67 = v_65;
+  vertex_main_outputs v_68 = {v_67.prevent_dce, v_66.pos};
+  return v_68;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.fxc.hlsl
index 391037b4..c8dcc12 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.ir.fxc.hlsl
@@ -144,11 +144,9 @@
 }
 
 float4 textureLoad_8acf41() {
-  Texture2D<float4> v_62 = arg_0_plane0;
-  Texture2D<float4> v_63 = arg_0_plane1;
-  tint_ExternalTextureParams v_64 = v_39(0u);
-  tint_ExternalTextureParams v_65 = v_64;
-  float4 res = tint_TextureLoadExternal(v_62, v_63, v_65, uint2((int(1)).xx));
+  tint_ExternalTextureParams v_62 = v_39(0u);
+  tint_ExternalTextureParams v_63 = v_62;
+  float4 res = tint_TextureLoadExternal(arg_0_plane0, arg_0_plane1, v_63, uint2((int(1)).xx));
   return res;
 }
 
@@ -165,15 +163,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8acf41();
-  VertexOutput v_66 = tint_symbol;
-  return v_66;
+  VertexOutput v_64 = tint_symbol;
+  return v_64;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_67 = vertex_main_inner();
-  VertexOutput v_68 = v_67;
-  VertexOutput v_69 = v_67;
-  vertex_main_outputs v_70 = {v_69.prevent_dce, v_68.pos};
-  return v_70;
+  VertexOutput v_65 = vertex_main_inner();
+  VertexOutput v_66 = v_65;
+  VertexOutput v_67 = v_65;
+  vertex_main_outputs v_68 = {v_67.prevent_dce, v_66.pos};
+  return v_68;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.dxc.hlsl
index 7a23843..9759328 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_8b62fb() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.fxc.hlsl
index 7a23843..9759328 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8b62fb.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_8b62fb() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.dxc.hlsl
index c58128e..dfcdb0d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_8bf8c2() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.fxc.hlsl
index c58128e..dfcdb0d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8bf8c2.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_8bf8c2() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.dxc.hlsl
index 54bbf71..d1e972b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_8c6176() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.fxc.hlsl
index 54bbf71..d1e972b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8c6176.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_8c6176() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.dxc.hlsl
index e750d22..2e5bd9d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_8ccbe3() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(int3(v_1, int(1u))).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(int3(v, int(1u))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8ccbe3();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.fxc.hlsl
index e750d22..2e5bd9d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ccbe3.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_8ccbe3() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float res = v.Load(int3(v_1, int(1u))).x;
+  int2 v = int2((int(1)).xx);
+  float res = arg_0.Load(int3(v, int(1u))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8ccbe3();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.dxc.hlsl
index 3941e2f..1e4f71a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_8d64c3() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.fxc.hlsl
index 3941e2f..1e4f71a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8d64c3.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_8d64c3() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.dxc.hlsl
index 26a91d8..a149fc8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_8db0ce() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8db0ce();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.fxc.hlsl
index 26a91d8..a149fc8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8db0ce.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_8db0ce() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8db0ce();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.dxc.hlsl
index b3f67af..601949e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_8e5032() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8e5032();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.fxc.hlsl
index b3f67af..601949e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e5032.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_8e5032() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8e5032();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.dxc.hlsl
index b7d8187..2c6bddc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_8e68c9() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.fxc.hlsl
index b7d8187..2c6bddc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8e68c9.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_8e68c9() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.dxc.hlsl
index 9e7dca3..4e3da74 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_8fc29b() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.fxc.hlsl
index 9e7dca3..4e3da74 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8fc29b.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_8fc29b() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.dxc.hlsl
index 73742a8..92c5c9c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_8ff033() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8ff033();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.fxc.hlsl
index 73742a8..92c5c9c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8ff033.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_8ff033() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_8ff033();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.dxc.hlsl
index 3bf1eb3..5d3e7b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_91ede5() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.fxc.hlsl
index 3bf1eb3..5d3e7b7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/91ede5.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_91ede5() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.dxc.hlsl
index 8fd28f0..b6fcadc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_9242e7() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.fxc.hlsl
index 8fd28f0..b6fcadc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9242e7.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_9242e7() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.dxc.hlsl
index 27cc435..9c4cf30 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_92dd61() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.fxc.hlsl
index 27cc435..9c4cf30 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/92dd61.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_92dd61() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.dxc.hlsl
index dd1b12f..9a31dac 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_92eb1f() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((1u).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_92eb1f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.fxc.hlsl
index dd1b12f..9a31dac 100644
--- a/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/92eb1f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_92eb1f() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((1u).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_92eb1f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.dxc.hlsl
index b957893..ba71b0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_936952() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_936952();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.fxc.hlsl
index b957893..ba71b0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/936952.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_936952() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_936952();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.dxc.hlsl
index c854955..c797401 100644
--- a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_93f23e() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.fxc.hlsl
index c854955..c797401 100644
--- a/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/93f23e.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_93f23e() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.dxc.hlsl
index 52902cc..a62e4c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_947107() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_947107();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.fxc.hlsl
index 52902cc..a62e4c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/947107.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_947107() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_947107();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.dxc.hlsl
index 06c8012..a895a79 100644
--- a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_96efd5() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_96efd5();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.fxc.hlsl
index 06c8012..a895a79 100644
--- a/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/96efd5.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_96efd5() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_96efd5();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.dxc.hlsl
index 55c7632..e79496f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_970308() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_970308();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.fxc.hlsl
index 55c7632..e79496f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/970308.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_970308() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_970308();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.dxc.hlsl
index 0193abe..69bd108 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9885b0() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9885b0();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.fxc.hlsl
index 0193abe..69bd108 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9885b0.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9885b0() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9885b0();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.dxc.hlsl
index 72b9c33..68ddb04 100644
--- a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_99d8fa() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.fxc.hlsl
index 72b9c33..68ddb04 100644
--- a/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/99d8fa.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_99d8fa() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.dxc.hlsl
index 183cf97..094fb1f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_9a7c90() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9a7c90();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.fxc.hlsl
index 183cf97..094fb1f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a7c90.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_9a7c90() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9a7c90();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.dxc.hlsl
index 92721da..b093725 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9a8c1e() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9a8c1e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.fxc.hlsl
index 92721da..b093725 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9a8c1e.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9a8c1e() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9a8c1e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.dxc.hlsl
index 71ad689..79a3675 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9aa733() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9aa733();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.fxc.hlsl
index 71ad689..79a3675 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9aa733.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9aa733() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9aa733();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.dxc.hlsl
index 418b44b..2aaea8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_9b2667() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9b2667();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.fxc.hlsl
index 418b44b..2aaea8a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b2667.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_9b2667() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9b2667();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.dxc.hlsl
index 298d974..c51f9f3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_9b5343() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9b5343();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.fxc.hlsl
index 298d974..c51f9f3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9b5343.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_9b5343() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9b5343();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.dxc.hlsl
index cd5d154..eb4db22 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_9c2376() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9c2376();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.fxc.hlsl
index cd5d154..eb4db22 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2376.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_9c2376() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9c2376();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.dxc.hlsl
index c538732..99e5eb0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_9c2a14() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9c2a14();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.fxc.hlsl
index c538732..99e5eb0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9c2a14.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_9c2a14() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9c2a14();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.dxc.hlsl
index d0c39fa..05a1321 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9cf7df() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9cf7df();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.fxc.hlsl
index d0c39fa..05a1321 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9cf7df.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9cf7df() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9cf7df();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.dxc.hlsl
index 6252a06..66203eb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9d70e9() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9d70e9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.fxc.hlsl
index 6252a06..66203eb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9d70e9.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9d70e9() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9d70e9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.dxc.hlsl
index fd06f75..ca03d9b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_9de6f5() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9de6f5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.fxc.hlsl
index fd06f75..ca03d9b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9de6f5.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_9de6f5() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9de6f5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.dxc.hlsl
index 687178c..95c7492 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_9ed19e() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(int3(v_1, int(1u))).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(int3(v, int(1u))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9ed19e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.fxc.hlsl
index 687178c..95c7492 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9ed19e.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D arg_0 : register(t0, space1);
 float textureLoad_9ed19e() {
-  Texture2D v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(int3(v_1, int(1u))).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(int3(v, int(1u))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9ed19e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.dxc.hlsl
index 331c389..b2aca00 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_9fa9fd() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.fxc.hlsl
index 331c389..b2aca00 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fa9fd.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_9fa9fd() {
-  RWTexture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.dxc.hlsl
index bd35443..3fb3ce5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9fbfd9() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9fbfd9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.fxc.hlsl
index bd35443..3fb3ce5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fbfd9.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_9fbfd9() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_9fbfd9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.dxc.hlsl
index 80f1e5b..8ac7fa1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_9fd7be() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.fxc.hlsl
index 80f1e5b..8ac7fa1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/9fd7be.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_9fd7be() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.dxc.hlsl
index d235d63..aeceba7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a03af1() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a03af1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.fxc.hlsl
index d235d63..aeceba7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a03af1.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a03af1() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a03af1();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.dxc.hlsl
index 232bdf6..56e5535 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_a24be1() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a24be1();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.fxc.hlsl
index 232bdf6..56e5535 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a24be1.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_a24be1() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  uint4 res = uint4(v.Load(int4(v_1, v_2, int(1u))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  uint4 res = uint4(arg_0.Load(int4(v, v_1, int(1u))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a24be1();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.dxc.hlsl
index 5b9ca32..baf9dee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a2b3f4() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.fxc.hlsl
index 5b9ca32..baf9dee 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a2b3f4.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a2b3f4() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.dxc.hlsl
index 19baf41..63c7822 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a3733f() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.fxc.hlsl
index 19baf41..63c7822 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3733f.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a3733f() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.dxc.hlsl
index 6f22522..4f02bdb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a3f122() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.fxc.hlsl
index 6f22522..4f02bdb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a3f122.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a3f122() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.dxc.hlsl
index 93334f3..d5d2109 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a548a8() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.fxc.hlsl
index 93334f3..d5d2109 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a548a8.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a548a8() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.dxc.hlsl
index 1c09700..62e142c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_a54e11() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.fxc.hlsl
index 1c09700..62e142c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a54e11.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_a54e11() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.dxc.hlsl
index 8939ba8..409fc81 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a583c9() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(v_1, int(int(1))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a583c9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.fxc.hlsl
index 8939ba8..409fc81 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a583c9.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a583c9() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(v_1, int(int(1))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a583c9();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.dxc.hlsl
index 9fd8019..4f87565 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a5c4e2() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.fxc.hlsl
index 9fd8019..4f87565 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5c4e2.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_a5c4e2() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.dxc.hlsl
index b5c8a7a..7245503 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a5e0a5() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.fxc.hlsl
index b5c8a7a..7245503 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a5e0a5.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a5e0a5() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.dxc.hlsl
index e8fc62d..49e2856 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a64b1d() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.fxc.hlsl
index e8fc62d..49e2856 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a64b1d.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a64b1d() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.dxc.hlsl
index 4955811..c983b38 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a6a85a() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a6a85a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.fxc.hlsl
index 4955811..c983b38 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6a85a.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a6a85a() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a6a85a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.dxc.hlsl
index 9b4f5cf..cc428cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_a6b61d() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a6b61d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.fxc.hlsl
index 9b4f5cf..cc428cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a6b61d.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_a6b61d() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a6b61d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.dxc.hlsl
index 4db5c16..301ddfd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_a7444c() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a7444c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.fxc.hlsl
index 4db5c16..301ddfd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7444c.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_a7444c() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a7444c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.dxc.hlsl
index d6ed511..91cec18 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_a7a3c3() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a7a3c3();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.fxc.hlsl
index d6ed511..91cec18 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7a3c3.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_a7a3c3() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a7a3c3();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.dxc.hlsl
index 1c3bbc9..3667007 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a7bcb4() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.fxc.hlsl
index 1c3bbc9..3667007 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7bcb4.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a7bcb4() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.dxc.hlsl
index acebeb3..35c2fe4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_a7c171() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.fxc.hlsl
index acebeb3..35c2fe4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a7c171.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_a7c171() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.dxc.hlsl
index 1bb7f1e..56be760 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a8549b() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a8549b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.fxc.hlsl
index 1bb7f1e..56be760 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a8549b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_a8549b() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a8549b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.dxc.hlsl
index b45adab..f7269b8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a92b18() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.fxc.hlsl
index b45adab..f7269b8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a92b18.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_a92b18() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.dxc.hlsl
index 0726f36..ddec2c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_a9a9f5() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((int(1)).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a9a9f5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.fxc.hlsl
index 0726f36..ddec2c5 100644
--- a/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/a9a9f5.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_a9a9f5() {
-  Texture3D<uint4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((int(1)).xxx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_a9a9f5();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.dxc.hlsl
index 9db9d1a..01b3789 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_aa2579() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.fxc.hlsl
index 9db9d1a..01b3789 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa2579.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_aa2579() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.dxc.hlsl
index 43c7eba..359fde1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_aa6130() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.fxc.hlsl
index 43c7eba..359fde1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa6130.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_aa6130() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.dxc.hlsl
index 9c1212f..b106c5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_aa8a0d() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aa8a0d();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.fxc.hlsl
index 9c1212f..b106c5f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aa8a0d.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_aa8a0d() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aa8a0d();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.dxc.hlsl
index 84567e3..33186d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_aae7f6() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aae7f6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.fxc.hlsl
index 84567e3..33186d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae7f6.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_aae7f6() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aae7f6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.dxc.hlsl
index 9ff7116..0372d64 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_aae9c3() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.fxc.hlsl
index 9ff7116..0372d64 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aae9c3.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_aae9c3() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.dxc.hlsl
index f303469..cd045ca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_ac64f7() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ac64f7();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.fxc.hlsl
index f303469..cd045ca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ac64f7.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_ac64f7() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ac64f7();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.dxc.hlsl
index 4664c63..2205441 100644
--- a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_acf22f() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.fxc.hlsl
index 4664c63..2205441 100644
--- a/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/acf22f.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_acf22f() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.dxc.hlsl
index 3813af2..01dec26 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_ad551e() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.fxc.hlsl
index 3813af2..01dec26 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ad551e.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_ad551e() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.dxc.hlsl
index f44a001..6a05c90 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_aeae73() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aeae73();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.fxc.hlsl
index f44a001..6a05c90 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aeae73.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_aeae73() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aeae73();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.dxc.hlsl
index 2796df8..4d38fb1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_aebc09() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aebc09();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.fxc.hlsl
index 2796df8..4d38fb1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/aebc09.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_aebc09() {
-  Texture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_aebc09();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.dxc.hlsl
index 5bf71ed..d855e6a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_af0507() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.fxc.hlsl
index 5bf71ed..d855e6a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/af0507.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_af0507() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.dxc.hlsl
index 7e52840..1a3c217 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_b1bf79() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b1bf79();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.fxc.hlsl
index 7e52840..1a3c217 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1bf79.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_b1bf79() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b1bf79();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.dxc.hlsl
index 59c788c..0caf047 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_b1ca35() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.fxc.hlsl
index 59c788c..0caf047 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b1ca35.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_b1ca35() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.dxc.hlsl
index c958fb0..2b59d98 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_b24d27() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b24d27();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.fxc.hlsl
index c958fb0..2b59d98 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b24d27.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_b24d27() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b24d27();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.dxc.hlsl
index 9315090..ade782b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_b25644() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.fxc.hlsl
index 9315090..ade782b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b25644.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_b25644() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.dxc.hlsl
index e53c907..ba1fcf4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_b27c33() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.fxc.hlsl
index e53c907..ba1fcf4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b27c33.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_b27c33() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.dxc.hlsl
index 7e3dba1..915557c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_b29f71() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b29f71();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.fxc.hlsl
index 7e3dba1..915557c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b29f71.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_b29f71() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  int4 res = int4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  int4 res = int4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b29f71();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.dxc.hlsl
index e396b83..947f998 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_b4d6c4() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.fxc.hlsl
index e396b83..947f998 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b4d6c4.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_b4d6c4() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.dxc.hlsl
index 748d75f..8bab2a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b58c6d() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b58c6d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.fxc.hlsl
index 748d75f..8bab2a3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b58c6d.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b58c6d() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b58c6d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.dxc.hlsl
index 3e16d30..c51de25 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_b60a86() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.fxc.hlsl
index 3e16d30..c51de25 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60a86.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_b60a86() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.dxc.hlsl
index 4dad301..985a69c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_b60db7() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.fxc.hlsl
index 4dad301..985a69c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b60db7.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_b60db7() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.dxc.hlsl
index 424e29b..59c44c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_b6ba5d() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b6ba5d();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.fxc.hlsl
index 424e29b..59c44c3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6ba5d.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_b6ba5d() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b6ba5d();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.dxc.hlsl
index 40e050d..6ffffed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_b6c458() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b6c458();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.fxc.hlsl
index 40e050d..6ffffed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b6c458.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_b6c458() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b6c458();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.dxc.hlsl
index 5892bcb..ee12c80 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_b73f6b() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b73f6b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.fxc.hlsl
index 5892bcb..ee12c80 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b73f6b.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_b73f6b() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b73f6b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.dxc.hlsl
index 36a2dda..a3cc3bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_b75c8f() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.fxc.hlsl
index 36a2dda..a3cc3bc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75c8f.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_b75c8f() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.dxc.hlsl
index 490a5d9..9941d7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b75d4a() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(v_1, int(1u)));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b75d4a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.fxc.hlsl
index 490a5d9..9941d7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b75d4a.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b75d4a() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(v_1, int(1u)));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b75d4a();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.dxc.hlsl
index 0510523..9af16bb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b7f74f() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b7f74f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.fxc.hlsl
index 0510523..9af16bb 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b7f74f.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b7f74f() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b7f74f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.dxc.hlsl
index d52aec8..1658c7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b80e7e() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b80e7e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.fxc.hlsl
index d52aec8..1658c7b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b80e7e.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_b80e7e() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b80e7e();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.dxc.hlsl
index 2076267..63b7483 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_b94d15() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b94d15();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.fxc.hlsl
index 2076267..63b7483 100644
--- a/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/b94d15.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_b94d15() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_b94d15();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.dxc.hlsl
index 1927af2..c494fbc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ba023a() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.fxc.hlsl
index 1927af2..c494fbc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba023a.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ba023a() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.dxc.hlsl
index e4d03d2..224d033 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ba74b2() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.fxc.hlsl
index e4d03d2..224d033 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ba74b2.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ba74b2() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.dxc.hlsl
index 1205eee..b7f7cdd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_babdf3() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.fxc.hlsl
index 1205eee..b7f7cdd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/babdf3.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_babdf3() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.dxc.hlsl
index be9dd99..5c724e9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_bba04a() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.fxc.hlsl
index be9dd99..5c724e9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bba04a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_bba04a() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(1u), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.dxc.hlsl
index ee2b4e3..55ce2ae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_bbb762() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.fxc.hlsl
index ee2b4e3..55ce2ae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bbb762.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_bbb762() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.dxc.hlsl
index 499d962..877b5de 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_bc3201() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(1u);
-  uint4 res = uint4(v.Load(int2(v_1, int(1u))));
+  int v = int(1u);
+  uint4 res = uint4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_bc3201();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.fxc.hlsl
index 499d962..877b5de 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc3201.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_bc3201() {
-  Texture1D<uint4> v = arg_0;
-  int v_1 = int(1u);
-  uint4 res = uint4(v.Load(int2(v_1, int(1u))));
+  int v = int(1u);
+  uint4 res = uint4(arg_0.Load(int2(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_bc3201();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.dxc.hlsl
index 582bd50..9bb5757 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_bc882d() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.fxc.hlsl
index 582bd50..9bb5757 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bc882d.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_bc882d() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.dxc.hlsl
index 6c263c2..a5d90e1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_bcbb3c() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((1u).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_bcbb3c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.fxc.hlsl
index 6c263c2..a5d90e1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bcbb3c.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_bcbb3c() {
-  Texture3D<float4> v = arg_0;
-  int3 v_1 = int3((1u).xxx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)))));
+  int3 v = int3((1u).xxx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_bcbb3c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.dxc.hlsl
index 5383a93..f4e00a0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_bd990a() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.fxc.hlsl
index 5383a93..f4e00a0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bd990a.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_bd990a() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.dxc.hlsl
index 6632263..c4ace39 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_bdc67a() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.fxc.hlsl
index 6632263..c4ace39 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bdc67a.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_bdc67a() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.dxc.hlsl
index 517f334..0a935f8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_bfd154() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_bfd154();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.fxc.hlsl
index 517f334..0a935f8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/bfd154.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_bfd154() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_bfd154();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.dxc.hlsl
index 956e835..b34700c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c02b74() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c02b74();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.fxc.hlsl
index 956e835..b34700c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c02b74.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c02b74() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c02b74();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.dxc.hlsl
index 275e80f..9ce1876 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c07013() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c07013();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.fxc.hlsl
index 275e80f..9ce1876 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c07013.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c07013() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c07013();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.dxc.hlsl
index 82484a2..4ee45d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_c16e00() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c16e00();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.fxc.hlsl
index 82484a2..4ee45d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c16e00.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_c16e00() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c16e00();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.dxc.hlsl
index 3b57ce8..ed70909 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c21b33() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c21b33();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.fxc.hlsl
index 3b57ce8..ed70909 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c21b33.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c21b33() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c21b33();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.dxc.hlsl
index 131a8ec..b90ca63 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c2a480() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c2a480();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.fxc.hlsl
index 131a8ec..b90ca63 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2a480.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c2a480() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int3(v_1, int(int(1)))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(int(1)))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c2a480();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.dxc.hlsl
index 7ce1c0b..12e9770 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_c2d09a() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.fxc.hlsl
index 7ce1c0b..12e9770 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c2d09a.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_c2d09a() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.dxc.hlsl
index 82a909f..35fe22d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c378ee() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(v_1, int(int(1))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c378ee();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.fxc.hlsl
index 82a909f..35fe22d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c378ee.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c378ee() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(v_1, int(int(1))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c378ee();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.dxc.hlsl
index 3cb5763..6e4838c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c40dcb() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c40dcb();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.fxc.hlsl
index 3cb5763..6e4838c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c40dcb.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c40dcb() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c40dcb();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.dxc.hlsl
index cfc9e3c..8144928 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c456bc() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c456bc();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.fxc.hlsl
index cfc9e3c..8144928 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c456bc.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c456bc() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c456bc();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.dxc.hlsl
index b53c1d9..c9a6e72 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c5791b() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c5791b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.fxc.hlsl
index b53c1d9..c9a6e72 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5791b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c5791b() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c5791b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.dxc.hlsl
index eda514f..48a509f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c5c86d() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.fxc.hlsl
index eda514f..48a509f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c5c86d.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c5c86d() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.dxc.hlsl
index 355bba5..81d137e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c66b20() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c66b20();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.fxc.hlsl
index 355bba5..81d137e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c66b20.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c66b20() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c66b20();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.dxc.hlsl
index 531aa4a..11e91e3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c7cbed() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c7cbed();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.fxc.hlsl
index 531aa4a..11e91e3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7cbed.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_c7cbed() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c7cbed();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.dxc.hlsl
index 8bb043f..98abb50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_c7e313() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.fxc.hlsl
index 8bb043f..98abb50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c7e313.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_c7e313() {
-  RWTexture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.dxc.hlsl
index b9cf142..12e743d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c80691() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.fxc.hlsl
index b9cf142..12e743d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c80691.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c80691() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.dxc.hlsl
index d451709..b11ae4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c8ed19() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c8ed19();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.fxc.hlsl
index d451709..b11ae4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c8ed19.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_c8ed19() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c8ed19();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.dxc.hlsl
index 5985b5b..c1c8388 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_c98bf4() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.fxc.hlsl
index 5985b5b..c1c8388 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c98bf4.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_c98bf4() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.dxc.hlsl
index ca7a1ab..5fad3be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c9b083() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.fxc.hlsl
index ca7a1ab..5fad3be 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9b083.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c9b083() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.dxc.hlsl
index ec65e79..94396ad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c9cc40() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c9cc40();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.fxc.hlsl
index ec65e79..94396ad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9cc40.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_c9cc40() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_c9cc40();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.dxc.hlsl
index d84ad0c..6872e50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c9f310() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.fxc.hlsl
index d84ad0c..6872e50 100644
--- a/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/c9f310.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_c9f310() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.dxc.hlsl
index a48658d..ec8cad9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_cac876() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.fxc.hlsl
index a48658d..ec8cad9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cac876.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_cac876() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.dxc.hlsl
index 02ff862..f90d44a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_cad5f2() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(v_1, int(1u)));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cad5f2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.fxc.hlsl
index 02ff862..f90d44a 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cad5f2.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_cad5f2() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(v_1, int(1u)));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(v, int(1u)));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cad5f2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.dxc.hlsl
index 67c4a41..ebcab4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_cb57c2() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cb57c2();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.fxc.hlsl
index 67c4a41..ebcab4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cb57c2.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_cb57c2() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float res = v.Load(int4(v_1, v_2, int(int(1)))).x;
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float res = arg_0.Load(int4(v, v_1, int(int(1)))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cb57c2();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.dxc.hlsl
index 7c3dc04..347bf1b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_cdbcf6() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.fxc.hlsl
index 7c3dc04..347bf1b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdbcf6.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_cdbcf6() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.dxc.hlsl
index 308436e..88d0939 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_cdccd2() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.fxc.hlsl
index 308436e..88d0939 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdccd2.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_cdccd2() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.dxc.hlsl
index 99cd2fc..a198052 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_cdd343() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cdd343();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.fxc.hlsl
index 99cd2fc..a198052 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cdd343.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_cdd343() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cdd343();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.dxc.hlsl
index e1dd7f3..4ef363d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_cddf6b() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.fxc.hlsl
index e1dd7f3..4ef363d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cddf6b.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_cddf6b() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.dxc.hlsl
index 883b536..b4831d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_cec477() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.fxc.hlsl
index 883b536..b4831d7 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cec477.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_cec477() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.dxc.hlsl
index 15db19a..a9c9032 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_cece6c() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cece6c();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.fxc.hlsl
index 15db19a..a9c9032 100644
--- a/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/cece6c.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_cece6c() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_cece6c();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.dxc.hlsl
index a9c1963..88fb11e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_d02afc() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d02afc();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.fxc.hlsl
index a9c1963..88fb11e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d02afc.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_d02afc() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d02afc();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.dxc.hlsl
index 4b9ef81..c7aa4ba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_d0e351() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.fxc.hlsl
index 4b9ef81..c7aa4ba 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d0e351.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_d0e351() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.dxc.hlsl
index 22b407b..728e0a8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_d357bb() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d357bb();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.fxc.hlsl
index 22b407b..728e0a8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d357bb.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_d357bb() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d357bb();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.dxc.hlsl
index 8bec8fc..7daddf3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_d37a08() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.fxc.hlsl
index 8bec8fc..7daddf3 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d37a08.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_d37a08() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.dxc.hlsl
index 07d3823..f4758a9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d3d8fc() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.fxc.hlsl
index 07d3823..f4758a9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d3d8fc.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d3d8fc() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.dxc.hlsl
index a5d22c8..642c60e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d41c72() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.fxc.hlsl
index a5d22c8..642c60e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d41c72.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d41c72() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.dxc.hlsl
index 5e3adff..92d3409 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_d4df19() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d4df19();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.fxc.hlsl
index 5e3adff..92d3409 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d4df19.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_d4df19() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d4df19();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.dxc.hlsl
index 9810aff..eaf396e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_d5c48d() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d5c48d();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.fxc.hlsl
index 9810aff..eaf396e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d5c48d.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_d5c48d() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d5c48d();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.dxc.hlsl
index cc79f08..767cf07 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d72de9() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.fxc.hlsl
index cc79f08..767cf07 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d72de9.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d72de9() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.dxc.hlsl
index 61d4421..1e30e65 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d7996a() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.fxc.hlsl
index 61d4421..1e30e65 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d7996a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d7996a() {
-  RWTexture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.dxc.hlsl
index be23c71..d9ca2ed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_d79c5c() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.fxc.hlsl
index be23c71..d9ca2ed 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d79c5c.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_d79c5c() {
-  RWTexture1D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int2(int(int(1)), int(0))));
+  uint4 res = uint4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.dxc.hlsl
index 3c408b4..21ff4d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_d80ff3() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.fxc.hlsl
index 3c408b4..21ff4d6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d80ff3.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_d80ff3() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.dxc.hlsl
index 09422b3..8109f1c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_d81c57() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d81c57();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.fxc.hlsl
index 09422b3..8109f1c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d81c57.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_d81c57() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d81c57();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.dxc.hlsl
index f5fd444..c422639 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_d85d61() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d85d61();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.fxc.hlsl
index f5fd444..c422639 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d85d61.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_d85d61() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d85d61();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.dxc.hlsl
index 53bae89..ef1d612 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_d8617f() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d8617f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.fxc.hlsl
index 53bae89..ef1d612 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8617f.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_d8617f() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_d8617f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.dxc.hlsl
index b82d7d5..371eb34 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d8be5a() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.fxc.hlsl
index b82d7d5..371eb34 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d8be5a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_d8be5a() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.dxc.hlsl
index e2e92e4..11924d4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_d91f37() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.fxc.hlsl
index e2e92e4..11924d4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/d91f37.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_d91f37() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.dxc.hlsl
index cb933d0..c9b6f0d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_dab04f() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.fxc.hlsl
index cb933d0..c9b6f0d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dab04f.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_dab04f() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.dxc.hlsl
index ec5ac54..f90f562 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_dbd554() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dbd554();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.fxc.hlsl
index ec5ac54..f90f562 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dbd554.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_dbd554() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dbd554();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.dxc.hlsl
index fba96e0..c7c50df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_dd5859() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.fxc.hlsl
index fba96e0..c7c50df 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd5859.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_dd5859() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.dxc.hlsl
index 1c35585..80fbb0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_dd8776() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dd8776();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.fxc.hlsl
index 1c35585..80fbb0c 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dd8776.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_dd8776() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dd8776();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.dxc.hlsl
index 96f8412..449c08d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_ddeed3() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ddeed3();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.fxc.hlsl
index 96f8412..449c08d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ddeed3.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_ddeed3() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ddeed3();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.dxc.hlsl
index 73e978f..1a0c080 100644
--- a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_de5a0e() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.fxc.hlsl
index 73e978f..1a0c080 100644
--- a/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/de5a0e.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_de5a0e() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.dxc.hlsl
index 4b5200a..549fa59 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_dee8e7() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dee8e7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.fxc.hlsl
index 4b5200a..549fa59 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dee8e7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_dee8e7() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dee8e7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.dxc.hlsl
index dc8e647..3240f14 100644
--- a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_defd9a() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.fxc.hlsl
index dc8e647..3240f14 100644
--- a/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/defd9a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_defd9a() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.dxc.hlsl
index 10f6879..dbc06c1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_dfdf3b() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dfdf3b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.fxc.hlsl
index 10f6879..dbc06c1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/dfdf3b.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_dfdf3b() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_dfdf3b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.dxc.hlsl
index 8a04b61..b5b0368 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_e1c3cf() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.fxc.hlsl
index 8a04b61..b5b0368 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e1c3cf.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_e1c3cf() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.dxc.hlsl
index cee6fb5..8549b02 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e2292f() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e2292f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.fxc.hlsl
index cee6fb5..8549b02 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2292f.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e2292f() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e2292f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.dxc.hlsl
index 42abcc1..8ead5b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_e2b3a1() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.fxc.hlsl
index 42abcc1..8ead5b0 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2b3a1.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_e2b3a1() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.dxc.hlsl
index d5443e3..8f10dcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_e2d7da() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.fxc.hlsl
index d5443e3..8f10dcc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e2d7da.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_e2d7da() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.dxc.hlsl
index b9ba639..63894da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_e33285() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.fxc.hlsl
index b9ba639..63894da 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e33285.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_e33285() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.dxc.hlsl
index 875d82e..20c4ddd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e35f72() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((int(1)).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e35f72();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.fxc.hlsl
index 875d82e..20c4ddd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e35f72.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e35f72() {
-  Texture3D<int4> v = arg_0;
-  int3 v_1 = int3((int(1)).xxx);
-  int4 res = int4(v.Load(int4(v_1, int(1u))));
+  int3 v = int3((int(1)).xxx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e35f72();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.dxc.hlsl
index e90c412..fbdbe57 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e3b08b() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e3b08b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.fxc.hlsl
index e90c412..fbdbe57 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3b08b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e3b08b() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((1u).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e3b08b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.dxc.hlsl
index 516a4ef..1903617 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e3d2cc() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(v_1, int(int(1))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e3d2cc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.fxc.hlsl
index 516a4ef..1903617 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e3d2cc.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e3d2cc() {
-  Texture2DMS<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(v_1, int(int(1))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e3d2cc();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.dxc.hlsl
index b3c922d..03cb335 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_e4051a() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.fxc.hlsl
index b3c922d..03cb335 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e4051a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_e4051a() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.dxc.hlsl
index 8a3248a..c5bcf33 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e57e92() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e57e92();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.fxc.hlsl
index 8a3248a..c5bcf33 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e57e92.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e57e92() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e57e92();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.dxc.hlsl
index 5d49c50..0004cd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_e59fdf() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e59fdf();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.fxc.hlsl
index 5d49c50..0004cd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e59fdf.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_e59fdf() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((1u).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e59fdf();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.dxc.hlsl
index 9576276..81fb7a4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e65916() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e65916();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.fxc.hlsl
index 9576276..81fb7a4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e65916.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_e65916() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e65916();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.dxc.hlsl
index 47cdaad..832a210 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e893d7() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e893d7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.fxc.hlsl
index 47cdaad..832a210 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e893d7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e893d7() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e893d7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.dxc.hlsl
index 0b5ce13..db231b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e92dd0() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e92dd0();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.fxc.hlsl
index 0b5ce13..db231b4 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e92dd0.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_e92dd0() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_e92dd0();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.dxc.hlsl
index 0bbf285..a19bc58 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_e9eb65() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.fxc.hlsl
index 0bbf285..a19bc58 100644
--- a/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/e9eb65.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_e9eb65() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.dxc.hlsl
index eaaccb7..89d1274 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_ea2abd() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ea2abd();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.fxc.hlsl
index eaaccb7..89d1274 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ea2abd.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_ea2abd() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ea2abd();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.dxc.hlsl
index 728cc66..0ae92b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_eb573b() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_eb573b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.fxc.hlsl
index 728cc66..0ae92b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/eb573b.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_eb573b() {
-  Texture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((int(1)).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_eb573b();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.dxc.hlsl
index 658a3b5..fb03dad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_ebfb92() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ebfb92();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.fxc.hlsl
index 658a3b5..fb03dad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ebfb92.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_ebfb92() {
-  Texture2D<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ebfb92();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.dxc.hlsl
index ecfae78..c9a9417 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_ecc823() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ecc823();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.fxc.hlsl
index ecfae78..c9a9417 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ecc823.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_ecc823() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((int(1)).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ecc823();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.dxc.hlsl
index ebba696..edf8456 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ed55a8() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.fxc.hlsl
index ebba696..edf8456 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ed55a8.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ed55a8() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.dxc.hlsl
index 26798da..46f3a9e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_ee33c5() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ee33c5();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.fxc.hlsl
index 26798da..46f3a9e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ee33c5.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_ee33c5() {
-  Texture3D<int4> v = arg_0;
-  int4 res = int4(v.Load(int4(int3((1u).xxx), int(0))));
+  int4 res = int4(arg_0.Load(int4(int3((1u).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ee33c5();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.dxc.hlsl
index a4ecadc..69c6684 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_eecf7d() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_eecf7d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.fxc.hlsl
index a4ecadc..69c6684 100644
--- a/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/eecf7d.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_eecf7d() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_eecf7d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.dxc.hlsl
index 4389ad5..aed7f4f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ef2ec3() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.fxc.hlsl
index 4389ad5..aed7f4f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef2ec3.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_ef2ec3() {
-  RWTexture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.dxc.hlsl
index 231623b..bc1a2cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_ef5405() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ef5405();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.fxc.hlsl
index 231623b..bc1a2cd 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ef5405.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_ef5405() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ef5405();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.dxc.hlsl
index 9db777d..a7d21ad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_efa787() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_efa787();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.fxc.hlsl
index 9db777d..a7d21ad 100644
--- a/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/efa787.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_efa787() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_efa787();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.dxc.hlsl
index bbfb7cd..f8eef06 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f0514a() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.fxc.hlsl
index bbfb7cd..f8eef06 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0514a.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f0514a() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.dxc.hlsl
index 95c4502..3a2b746 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f06b69() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f06b69();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.fxc.hlsl
index 95c4502..3a2b746 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f06b69.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f06b69() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(int(1)), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f06b69();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.dxc.hlsl
index bb33fe8..9c64dca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f0abad() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(v_1, int(int(1))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f0abad();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.fxc.hlsl
index bb33fe8..9c64dca 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f0abad.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f0abad() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(v_1, int(int(1))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f0abad();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.dxc.hlsl
index c277b45..9f22400 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f1c549() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.fxc.hlsl
index c277b45..9f22400 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f1c549.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture3D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f1c549() {
-  RWTexture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.dxc.hlsl
index fc8e981..8f03cec 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f2a7ff() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f2a7ff();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.fxc.hlsl
index fc8e981..8f03cec 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2a7ff.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f2a7ff() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f2a7ff();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.dxc.hlsl
index 1d0f6e4..acb8a27 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f2bdd4() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.fxc.hlsl
index 1d0f6e4..acb8a27 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2bdd4.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f2bdd4() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.dxc.hlsl
index 941105d..8149367 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_f2c311() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.fxc.hlsl
index 941105d..8149367 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f2c311.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 int4 textureLoad_f2c311() {
-  RWTexture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.dxc.hlsl
index ae04233..a1b112e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f348d9() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f348d9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.fxc.hlsl
index ae04233..a1b112e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f348d9.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f348d9() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  int v_2 = int(1u);
-  float4 res = float4(v.Load(int4(v_1, v_2, int(int(1)))));
+  int2 v = int2((1u).xx);
+  int v_1 = int(1u);
+  float4 res = float4(arg_0.Load(int4(v, v_1, int(int(1)))));
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f348d9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.dxc.hlsl
index bb9c4c1..f78d957 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f35ac7() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f35ac7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.fxc.hlsl
index bb9c4c1..f78d957 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f35ac7.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f35ac7() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f35ac7();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.dxc.hlsl
index 0ba5da0..b21a988 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f379e2() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f379e2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.fxc.hlsl
index 0ba5da0..b21a988 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f379e2.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f379e2() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f379e2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.dxc.hlsl
index d082f35..d648add 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_f56e6f() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f56e6f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.fxc.hlsl
index d082f35..d648add 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f56e6f.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_f56e6f() {
-  Texture3D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  uint4 res = uint4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f56e6f();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.dxc.hlsl
index 84a581d..726d2ff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f5aee2() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f5aee2();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.fxc.hlsl
index 84a581d..726d2ff 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5aee2.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f5aee2() {
-  Texture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((1u).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f5aee2();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.dxc.hlsl
index db8fcbf..cc18cef 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f5fbc6() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.fxc.hlsl
index db8fcbf..cc18cef 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f5fbc6.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f5fbc6() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.dxc.hlsl
index 58900c9..a33f719 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f74bd8() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f74bd8();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.fxc.hlsl
index 58900c9..a33f719 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f74bd8.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f74bd8() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f74bd8();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.dxc.hlsl
index 20cc68b..39290b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f7f3bc() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.fxc.hlsl
index 20cc68b..39290b9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f3bc.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f7f3bc() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.dxc.hlsl
index 7bf0c53..7823bae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f7f936() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f7f936();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.fxc.hlsl
index 7bf0c53..7823bae 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f7f936.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f7f936() {
-  Texture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f7f936();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.dxc.hlsl
index 1938453..cdb9e03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f81792() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.fxc.hlsl
index 1938453..cdb9e03 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f81792.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f81792() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.dxc.hlsl
index 3498041..7810775 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f82eb2() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.fxc.hlsl
index 3498041..7810775 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f82eb2.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture1D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f82eb2() {
-  RWTexture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(1u), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.dxc.hlsl
index 4d64a2e..b56df0e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f85291() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f85291();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.fxc.hlsl
index 4d64a2e..b56df0e 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f85291.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f85291() {
-  Texture2D<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int3(v_1, int(1u))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int3(v, int(1u))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f85291();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.dxc.hlsl
index 04d45b4..ca29797 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f8a2e8() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f8a2e8();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.fxc.hlsl
index 04d45b4..ca29797 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f8a2e8.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_f8a2e8() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f8a2e8();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.dxc.hlsl
index 3ac1b9a..b2817f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f92c2d() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.fxc.hlsl
index 3ac1b9a..b2817f6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f92c2d.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<float4> arg_0 : register(u0, space1);
 float4 textureLoad_f92c2d() {
-  RWTexture2D<float4> v = arg_0;
-  float4 res = float4(v.Load(int3(int2((int(1)).xx), int(0))));
+  float4 res = float4(arg_0.Load(int3(int2((int(1)).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.dxc.hlsl
index 4caafac..1005140 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f9eaaf() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f9eaaf();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.fxc.hlsl
index 4caafac..1005140 100644
--- a/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/f9eaaf.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<int4> arg_0 : register(t0, space1);
 int4 textureLoad_f9eaaf() {
-  Texture1D<int4> v = arg_0;
-  int4 res = int4(v.Load(int2(int(1u), int(0))));
+  int4 res = int4(arg_0.Load(int2(int(1u), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_f9eaaf();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.dxc.hlsl
index ff0ed33..0914058 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.dxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_fc47ff() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.fxc.hlsl
index ff0ed33..0914058 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc47ff.wgsl.expected.ir.fxc.hlsl
@@ -2,8 +2,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2D<int4> arg_0 : register(u0, space1);
 int4 textureLoad_fc47ff() {
-  RWTexture2D<int4> v = arg_0;
-  int4 res = int4(v.Load(int3(int2((1u).xx), int(0))));
+  int4 res = int4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.dxc.hlsl
index 9f6e77f..467ce05 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_fc6d36() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fc6d36();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.fxc.hlsl
index 9f6e77f..467ce05 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fc6d36.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<int4> arg_0 : register(t0, space1);
 int4 textureLoad_fc6d36() {
-  Texture2DArray<int4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int4 res = int4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  int4 res = int4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fc6d36();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.dxc.hlsl
index fe4449a..2f255dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_fcd23d() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(v_1, int(int(1))).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(v, int(int(1))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fcd23d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.fxc.hlsl
index fe4449a..2f255dc 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fcd23d.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<float4> arg_0 : register(t0, space1);
 float textureLoad_fcd23d() {
-  Texture2DMS<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float res = v.Load(v_1, int(int(1))).x;
+  int2 v = int2((1u).xx);
+  float res = arg_0.Load(v, int(int(1))).x;
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fcd23d();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.dxc.hlsl
index f399f76..b60ad8d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_fd6442() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fd6442();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.fxc.hlsl
index f399f76..b60ad8d 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd6442.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2D<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_fd6442() {
-  Texture2D<uint4> v = arg_0;
-  uint4 res = uint4(v.Load(int3(int2((1u).xx), int(0))));
+  uint4 res = uint4(arg_0.Load(int3(int2((1u).xx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fd6442();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.dxc.hlsl
index 00acd93..e3429b1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_fd9606() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.fxc.hlsl
index 00acd93..e3429b1 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fd9606.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 float4 textureLoad_fd9606() {
-  RWTexture2DArray<float4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  float4 res = float4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((1u).xx);
+  float4 res = float4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.dxc.hlsl
index 68ac2ff..5f3b894 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_fdebd0() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fdebd0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.fxc.hlsl
index 68ac2ff..5f3b894 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fdebd0.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_fdebd0() {
-  Texture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(int(1)), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(int(1)), int(0))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fdebd0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.dxc.hlsl
index 4c0a98d..3af3ed9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.dxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_fe0565() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(v_1, int(int(1))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fe0565();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.fxc.hlsl
index 4c0a98d..3af3ed9 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe0565.wgsl.expected.ir.fxc.hlsl
@@ -12,9 +12,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DMS<uint4> arg_0 : register(t0, space1);
 uint4 textureLoad_fe0565() {
-  Texture2DMS<uint4> v = arg_0;
-  int2 v_1 = int2((1u).xx);
-  uint4 res = uint4(v.Load(v_1, int(int(1))));
+  int2 v = int2((1u).xx);
+  uint4 res = uint4(arg_0.Load(v, int(int(1))));
   return res;
 }
 
@@ -31,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fe0565();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.dxc.hlsl
index 8bbe949..8571352 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_fe222a() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fe222a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.fxc.hlsl
index 8bbe949..8571352 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe222a.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture1D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_fe222a() {
-  Texture1D<float4> v = arg_0;
-  float4 res = float4(v.Load(int2(int(int(1)), int(0))));
+  float4 res = float4(arg_0.Load(int2(int(int(1)), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_fe222a();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.dxc.hlsl
index 63cb3da..c35bced 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.dxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_fe2c1b() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.fxc.hlsl
index 63cb3da..c35bced 100644
--- a/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/fe2c1b.wgsl.expected.ir.fxc.hlsl
@@ -2,9 +2,8 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 uint4 textureLoad_fe2c1b() {
-  RWTexture2DArray<uint4> v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  uint4 res = uint4(v.Load(int4(v_1, int(1u), int(0))));
+  int2 v = int2((int(1)).xx);
+  uint4 res = uint4(arg_0.Load(int4(v, int(1u), int(0))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.dxc.hlsl
index fee0df2..40b2dd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.dxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_feab99() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_feab99();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.fxc.hlsl
index fee0df2..40b2dd6 100644
--- a/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/feab99.wgsl.expected.ir.fxc.hlsl
@@ -12,8 +12,7 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture3D<float4> arg_0 : register(t0, space1);
 float4 textureLoad_feab99() {
-  Texture3D<float4> v = arg_0;
-  float4 res = float4(v.Load(int4(int3((int(1)).xxx), int(0))));
+  float4 res = float4(arg_0.Load(int4(int3((int(1)).xxx), int(0))));
   return res;
 }
 
@@ -30,15 +29,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_feab99();
-  VertexOutput v_1 = tint_symbol;
-  return v_1;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_2 = vertex_main_inner();
-  VertexOutput v_3 = v_2;
-  VertexOutput v_4 = v_2;
-  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
-  return v_5;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.dxc.hlsl
index 45589c7..aecce9b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.dxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_ff1119() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ff1119();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.fxc.hlsl
index 45589c7..aecce9b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/ff1119.wgsl.expected.ir.fxc.hlsl
@@ -12,10 +12,9 @@
 RWByteAddressBuffer prevent_dce : register(u0);
 Texture2DArray arg_0 : register(t0, space1);
 float textureLoad_ff1119() {
-  Texture2DArray v = arg_0;
-  int2 v_1 = int2((int(1)).xx);
-  int v_2 = int(int(1));
-  float res = v.Load(int4(v_1, v_2, int(1u))).x;
+  int2 v = int2((int(1)).xx);
+  int v_1 = int(int(1));
+  float res = arg_0.Load(int4(v, v_1, int(1u))).x;
   return res;
 }
 
@@ -32,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureLoad_ff1119();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_2 = tint_symbol;
+  return v_2;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_3 = vertex_main_inner();
+  VertexOutput v_4 = v_3;
+  VertexOutput v_5 = v_3;
+  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
+  return v_6;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.dxc.hlsl
index 36397e3..0169c15 100644
--- a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_17e988() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.fxc.hlsl
index 36397e3..0169c15 100644
--- a/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/17e988.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_17e988() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.dxc.hlsl
index e4d10ac..75c4367 100644
--- a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_193203() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.fxc.hlsl
index e4d10ac..75c4367 100644
--- a/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/193203.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_193203() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.dxc.hlsl
index 14d7ccf..c699117 100644
--- a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_1a4e1b() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(1u)));
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.fxc.hlsl
index 14d7ccf..c699117 100644
--- a/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/1a4e1b.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_1a4e1b() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(1u)));
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.dxc.hlsl
index 5c251a9..7bc2d98 100644
--- a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_4703d0() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.fxc.hlsl
index 5c251a9..7bc2d98 100644
--- a/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/4703d0.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_4703d0() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.dxc.hlsl
index 9bd2ed8..bee70e2 100644
--- a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_4dd1bf() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.fxc.hlsl
index 9bd2ed8..bee70e2 100644
--- a/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/4dd1bf.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_4dd1bf() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float4((1.0f).xxx, float(int(1))));
+  float4 res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.dxc.hlsl
index 9504425..21c9afa 100644
--- a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_60bf45() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.fxc.hlsl
index 9504425..21c9afa 100644
--- a/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/60bf45.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_60bf45() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))), (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.dxc.hlsl
index 8dc71ea..2a254e4 100644
--- a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_6717ca() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.fxc.hlsl
index 8dc71ea..2a254e4 100644
--- a/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/6717ca.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_6717ca() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(int(1))));
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.dxc.hlsl
index 079ac30..f45e457 100644
--- a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_7e9ffd() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(int(1))));
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.fxc.hlsl
index 079ac30..f45e457 100644
--- a/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/7e9ffd.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_7e9ffd() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float3((1.0f).xx, float(int(1))));
+  float res = arg_0.Sample(arg_1, float3((1.0f).xx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.dxc.hlsl
index aec7fca..cb5a2b0 100644
--- a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_7fd8cb() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float4((1.0f).xxx, float(1u)));
+  float res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.fxc.hlsl
index aec7fca..cb5a2b0 100644
--- a/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/7fd8cb.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_7fd8cb() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float4((1.0f).xxx, float(1u)));
+  float res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.dxc.hlsl
index 8d6f871..8f49a3b 100644
--- a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_bc7477() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.fxc.hlsl
index 8d6f871..8f49a3b 100644
--- a/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/bc7477.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_bc7477() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float4((1.0f).xxx, float(1u)));
+  float4 res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.dxc.hlsl
index 9ff4d9f..45fef82 100644
--- a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_c2f4e8() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float4((1.0f).xxx, float(int(1))));
+  float res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.fxc.hlsl
index 9ff4d9f..45fef82 100644
--- a/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/c2f4e8.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSample_c2f4e8() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.Sample(v_1, float4((1.0f).xxx, float(int(1))));
+  float res = arg_0.Sample(arg_1, float4((1.0f).xxx, float(int(1))));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.dxc.hlsl
index 39868e5..0bb1788 100644
--- a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_d6b281() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.fxc.hlsl
index 39868e5..0bb1788 100644
--- a/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSample/d6b281.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSample_d6b281() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.Sample(v_1, float3((1.0f).xx, float(1u)));
+  float4 res = arg_0.Sample(arg_1, float3((1.0f).xx, float(1u)));
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.dxc.hlsl
index 4aca5ca..a5146b12 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/7c04e6.wgsl.expected.ir.dxc.hlsl
@@ -139,11 +139,8 @@
 }
 
 float4 textureSampleBaseClampToEdge_7c04e6() {
-  Texture2D<float4> v_60 = arg_0_plane0;
-  Texture2D<float4> v_61 = arg_0_plane1;
-  tint_ExternalTextureParams v_62 = v_37(0u);
-  tint_ExternalTextureParams v_63 = v_62;
-  float4 res = tint_TextureSampleExternal(v_60, v_61, v_63, arg_1, (1.0f).xx);
+  tint_ExternalTextureParams v_60 = v_37(0u);
+  float4 res = tint_TextureSampleExternal(arg_0_plane0, arg_0_plane1, v_60, arg_1, (1.0f).xx);
   return res;
 }
 
@@ -160,15 +157,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleBaseClampToEdge_7c04e6();
-  VertexOutput v_64 = tint_symbol;
-  return v_64;
+  VertexOutput v_61 = tint_symbol;
+  return v_61;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_65 = vertex_main_inner();
-  VertexOutput v_66 = v_65;
-  VertexOutput v_67 = v_65;
-  vertex_main_outputs v_68 = {v_67.prevent_dce, v_66.pos};
-  return v_68;
+  VertexOutput v_62 = vertex_main_inner();
+  VertexOutput v_63 = v_62;
+  VertexOutput v_64 = v_62;
+  vertex_main_outputs v_65 = {v_64.prevent_dce, v_63.pos};
+  return v_65;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.dxc.hlsl
index ae37908..b7409fa 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.dxc.hlsl
@@ -13,13 +13,11 @@
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBaseClampToEdge_9ca02c() {
-  Texture2D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  uint2 v_2 = (0u).xx;
-  v.GetDimensions(v_2[0u], v_2[1u]);
-  float2 v_3 = ((0.5f).xx / float2(v_2));
-  float2 v_4 = clamp((1.0f).xx, v_3, ((1.0f).xx - v_3));
-  float4 res = v.SampleLevel(v_1, v_4, float(0.0f));
+  uint2 v = (0u).xx;
+  arg_0.GetDimensions(v[0u], v[1u]);
+  float2 v_1 = ((0.5f).xx / float2(v));
+  float2 v_2 = clamp((1.0f).xx, v_1, ((1.0f).xx - v_1));
+  float4 res = arg_0.SampleLevel(arg_1, v_2, float(0.0f));
   return res;
 }
 
@@ -36,15 +34,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleBaseClampToEdge_9ca02c();
-  VertexOutput v_5 = tint_symbol;
-  return v_5;
+  VertexOutput v_3 = tint_symbol;
+  return v_3;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_6 = vertex_main_inner();
-  VertexOutput v_7 = v_6;
-  VertexOutput v_8 = v_6;
-  vertex_main_outputs v_9 = {v_8.prevent_dce, v_7.pos};
-  return v_9;
+  VertexOutput v_4 = vertex_main_inner();
+  VertexOutput v_5 = v_4;
+  VertexOutput v_6 = v_4;
+  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
+  return v_7;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.fxc.hlsl
index ae37908..b7409fa 100644
--- a/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBaseClampToEdge/9ca02c.wgsl.expected.ir.fxc.hlsl
@@ -13,13 +13,11 @@
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBaseClampToEdge_9ca02c() {
-  Texture2D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  uint2 v_2 = (0u).xx;
-  v.GetDimensions(v_2[0u], v_2[1u]);
-  float2 v_3 = ((0.5f).xx / float2(v_2));
-  float2 v_4 = clamp((1.0f).xx, v_3, ((1.0f).xx - v_3));
-  float4 res = v.SampleLevel(v_1, v_4, float(0.0f));
+  uint2 v = (0u).xx;
+  arg_0.GetDimensions(v[0u], v[1u]);
+  float2 v_1 = ((0.5f).xx / float2(v));
+  float2 v_2 = clamp((1.0f).xx, v_1, ((1.0f).xx - v_1));
+  float4 res = arg_0.SampleLevel(arg_1, v_2, float(0.0f));
   return res;
 }
 
@@ -36,15 +34,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleBaseClampToEdge_9ca02c();
-  VertexOutput v_5 = tint_symbol;
-  return v_5;
+  VertexOutput v_3 = tint_symbol;
+  return v_3;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_6 = vertex_main_inner();
-  VertexOutput v_7 = v_6;
-  VertexOutput v_8 = v_6;
-  vertex_main_outputs v_9 = {v_8.prevent_dce, v_7.pos};
-  return v_9;
+  VertexOutput v_4 = vertex_main_inner();
+  VertexOutput v_5 = v_4;
+  VertexOutput v_6 = v_4;
+  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
+  return v_7;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.dxc.hlsl
index 585f53b..df89034 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_1c707e() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.fxc.hlsl
index 585f53b..df89034 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/1c707e.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_1c707e() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.dxc.hlsl
index 971eac8..a7f90f1 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_80e579() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.fxc.hlsl
index 971eac8..a7f90f1 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/80e579.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_80e579() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.dxc.hlsl
index 0d1d57c..891ac22 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_87915c() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.fxc.hlsl
index 0d1d57c..891ac22 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/87915c.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_87915c() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.dxc.hlsl
index eeb6836..e1674b7 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_9dbb51() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.fxc.hlsl
index eeb6836..e1674b7 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/9dbb51.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_9dbb51() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float4 res = arg_0.SampleBias(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.dxc.hlsl
index e7a7065..82a143f 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_c6953d() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.fxc.hlsl
index e7a7065..82a143f 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/c6953d.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_c6953d() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.dxc.hlsl
index bbd7c6b..f239304 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_eed7c4() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.fxc.hlsl
index bbd7c6b..f239304 100644
--- a/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleBias/eed7c4.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleBias_eed7c4() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleBias(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float4 res = arg_0.SampleBias(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.dxc.hlsl
index 1d8ff54..76ddebb 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_1912e5() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.fxc.hlsl
index 1d8ff54..76ddebb 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/1912e5.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_1912e5() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.dxc.hlsl
index 4f9282a..5e314c1 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_7b5025() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.fxc.hlsl
index 4f9282a..5e314c1 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/7b5025.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_7b5025() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.dxc.hlsl
index 2aa2639..f560ad4 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_90ae56() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.fxc.hlsl
index 2aa2639..f560ad4 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/90ae56.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_90ae56() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.dxc.hlsl
index 1ea1cc4..75034a0 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_a3ca7e() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.fxc.hlsl
index 1ea1cc4..75034a0 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/a3ca7e.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_a3ca7e() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.dxc.hlsl
index 34349cd..3fc1cd8 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_af1051() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.fxc.hlsl
index 34349cd..3fc1cd8 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/af1051.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_af1051() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.dxc.hlsl
index bcfae13..763ee35 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.dxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_dd431d() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.fxc.hlsl
index bcfae13..763ee35 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompare/dd431d.wgsl.expected.ir.fxc.hlsl
@@ -3,9 +3,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompare_dd431d() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmp(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmp(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.dxc.hlsl
index 48e71b5..69d887a 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_1116ed() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_1116ed();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.fxc.hlsl
index 48e71b5..69d887a 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/1116ed.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_1116ed() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_1116ed();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.dxc.hlsl
index 2f93d10..4282282 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_4cf3a2() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_4cf3a2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.fxc.hlsl
index 2f93d10..4282282 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/4cf3a2.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_4cf3a2() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float4((1.0f).xxx, float(int(1))), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float4((1.0f).xxx, float(int(1))), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_4cf3a2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.dxc.hlsl
index e2ad3e5..3b55abc 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_7dc3c0() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_7dc3c0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.fxc.hlsl
index e2ad3e5..3b55abc 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/7dc3c0.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_7dc3c0() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_7dc3c0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.dxc.hlsl
index 5434786..de8f33f 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_958c87() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_958c87();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.fxc.hlsl
index 5434786..de8f33f 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/958c87.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_958c87() {
-  TextureCubeArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float4((1.0f).xxx, float(1u)), 1.0f);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float4((1.0f).xxx, float(1u)), 1.0f);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_958c87();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.dxc.hlsl
index 92be706..4eda26d 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_b6e47c() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_b6e47c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.fxc.hlsl
index 92be706..4eda26d 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/b6e47c.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_b6e47c() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(int(1))), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_b6e47c();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.dxc.hlsl
index 4a81d9b..e9090fa 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_bcb3dd() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_bcb3dd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.fxc.hlsl
index 4a81d9b..e9090fa 100644
--- a/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleCompareLevel/bcb3dd.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerComparisonState arg_1 : register(s1, space1);
 float textureSampleCompareLevel_bcb3dd() {
-  Texture2DArray v = arg_0;
-  SamplerComparisonState v_1 = arg_1;
-  float res = v.SampleCmpLevelZero(v_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
+  float res = arg_0.SampleCmpLevelZero(arg_1, float3((1.0f).xx, float(1u)), 1.0f, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleCompareLevel_bcb3dd();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.dxc.hlsl
index 5acb47d..d298a20 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_2ecd8f() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_2ecd8f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.fxc.hlsl
index 5acb47d..d298a20 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/2ecd8f.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_2ecd8f() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_2ecd8f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.dxc.hlsl
index b5fd3ea..1c1a883 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_7cd6de() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx, (int(1)).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_7cd6de();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.fxc.hlsl
index b5fd3ea..1c1a883 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/7cd6de.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_7cd6de() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx, (int(1)).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_7cd6de();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.dxc.hlsl
index 23f20f2..ce53eb9 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_a09131() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_a09131();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.fxc.hlsl
index 23f20f2..ce53eb9 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/a09131.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_a09131() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(1u)), (1.0f).xx, (1.0f).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_a09131();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.dxc.hlsl
index 227f3c7..0ab04b1 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_bbb58f() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float4((1.0f).xxx, float(1u)), (1.0f).xxx, (1.0f).xxx);
+  float4 res = arg_0.SampleGrad(arg_1, float4((1.0f).xxx, float(1u)), (1.0f).xxx, (1.0f).xxx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_bbb58f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.fxc.hlsl
index 227f3c7..0ab04b1 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/bbb58f.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_bbb58f() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float4((1.0f).xxx, float(1u)), (1.0f).xxx, (1.0f).xxx);
+  float4 res = arg_0.SampleGrad(arg_1, float4((1.0f).xxx, float(1u)), (1.0f).xxx, (1.0f).xxx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_bbb58f();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.dxc.hlsl
index 71ba139..5d551b8 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_d65515() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx, (int(1)).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_d65515();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.fxc.hlsl
index 71ba139..5d551b8 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/d65515.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_d65515() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx, (int(1)).xx);
+  float4 res = arg_0.SampleGrad(arg_1, float3((1.0f).xx, float(int(1))), (1.0f).xx, (1.0f).xx, (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_d65515();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.dxc.hlsl
index 53bc560..d48791a 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_e383db() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float4((1.0f).xxx, float(int(1))), (1.0f).xxx, (1.0f).xxx);
+  float4 res = arg_0.SampleGrad(arg_1, float4((1.0f).xxx, float(int(1))), (1.0f).xxx, (1.0f).xxx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_e383db();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.fxc.hlsl
index 53bc560..d48791a 100644
--- a/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleGrad/e383db.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleGrad_e383db() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleGrad(v_1, float4((1.0f).xxx, float(int(1))), (1.0f).xxx, (1.0f).xxx);
+  float4 res = arg_0.SampleGrad(arg_1, float4((1.0f).xxx, float(int(1))), (1.0f).xxx, (1.0f).xxx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleGrad_e383db();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.dxc.hlsl
index 7bea618..69ff5cb 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_02be59() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(int(1)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_02be59();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.fxc.hlsl
index 7bea618..69ff5cb 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/02be59.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_02be59() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(int(1)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_02be59();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.dxc.hlsl
index 176e8a0..49bc479 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_0b0a1b() {
-  Texture2D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xx, float(1.0f), (int(1)).xx);
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1.0f), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_0b0a1b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.fxc.hlsl
index 176e8a0..49bc479 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0b0a1b.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_0b0a1b() {
-  Texture2D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xx, float(1.0f), (int(1)).xx);
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1.0f), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_0b0a1b();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.dxc.hlsl
index 731f99c..37bd13f 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_0bdd9a() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(int(1)));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float4 v = float4((1.0f).xxx, float(int(1)));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_0bdd9a();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.fxc.hlsl
index 731f99c..37bd13f 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/0bdd9a.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_0bdd9a() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(int(1)));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float4 v = float4((1.0f).xxx, float(int(1)));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_0bdd9a();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.dxc.hlsl
index 69a6170..ab94714 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCube arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_1b0291() {
-  TextureCube v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xxx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(int(1)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_1b0291();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.fxc.hlsl
index 69a6170..ab94714 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1b0291.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCube arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_1b0291() {
-  TextureCube v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xxx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(int(1)));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_1b0291();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.dxc.hlsl
index db23f9d..98eaa44 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_1bf73e() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_1bf73e();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.fxc.hlsl
index db23f9d..98eaa44 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/1bf73e.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_1bf73e() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_1bf73e();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.dxc.hlsl
index 6bdeba0..895f6d7 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_265cc7() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float3 v = float3((1.0f).xx, float(1u));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_265cc7();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.fxc.hlsl
index 6bdeba0..895f6d7 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/265cc7.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_265cc7() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float3 v = float3((1.0f).xx, float(1u));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_265cc7();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.dxc.hlsl
index 850ca70..57e3ef5 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_2974eb() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_2974eb();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.fxc.hlsl
index 850ca70..57e3ef5 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/2974eb.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_2974eb() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_2974eb();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.dxc.hlsl
index 1aa797d..dc238c8 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_302be4() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_302be4();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.fxc.hlsl
index 1aa797d..dc238c8 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/302be4.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_302be4() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_302be4();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.dxc.hlsl
index 2f72c26..a9eb83b 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_36780e() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_36780e();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.fxc.hlsl
index 2f72c26..a9eb83b 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36780e.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_36780e() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_36780e();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.dxc.hlsl
index f817b4e..4d80354 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_36f0d3() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(1u), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_36f0d3();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.fxc.hlsl
index f817b4e..4d80354 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/36f0d3.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_36f0d3() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(1u), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_36f0d3();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.dxc.hlsl
index 9d6e11d..80cf221 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_3c3442() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_3c3442();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.fxc.hlsl
index 9d6e11d..80cf221 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/3c3442.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_3c3442() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_3c3442();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.dxc.hlsl
index b69f617..34272d3 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_615583() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_615583();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.fxc.hlsl
index b69f617..34272d3 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/615583.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_615583() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_615583();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.dxc.hlsl
index 4a7e8c5..ac40070 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_73e892() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1u));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_73e892();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.fxc.hlsl
index 4a7e8c5..ac40070 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/73e892.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_73e892() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1u));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_73e892();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.dxc.hlsl
index 3b38b5c..f383d9a 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_749baf() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(int(1)), (int(1)).xx);
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(int(1)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_749baf();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.fxc.hlsl
index 3b38b5c..f383d9a 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/749baf.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_749baf() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(int(1)), (int(1)).xx);
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(int(1)), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_749baf();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.dxc.hlsl
index 8978cfd..f5dd164 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_941a53() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float4 v = float4((1.0f).xxx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_941a53();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.fxc.hlsl
index 8978cfd..f5dd164 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/941a53.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_941a53() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float4 v = float4((1.0f).xxx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_941a53();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.dxc.hlsl
index a20721d..892e68b 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_a12142() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float4 v = float4((1.0f).xxx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_a12142();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.fxc.hlsl
index a20721d..892e68b 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/a12142.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_a12142() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(1u));
+  float4 v = float4((1.0f).xxx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_a12142();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.dxc.hlsl
index f9a6918..5ea7cb2 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_aab3b9() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(1u));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float4 v = float4((1.0f).xxx, float(1u));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_aab3b9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.fxc.hlsl
index f9a6918..5ea7cb2 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/aab3b9.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_aab3b9() {
-  TextureCubeArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(1u));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f));
+  float4 v = float4((1.0f).xxx, float(1u));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_aab3b9();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.dxc.hlsl
index 173b5de..f6f85d1 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture3D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_abfcc0() {
-  Texture3D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xxx, float(1.0f));
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1.0f));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_abfcc0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.fxc.hlsl
index 173b5de..f6f85d1 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/abfcc0.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture3D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_abfcc0() {
-  Texture3D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xxx, float(1.0f));
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1.0f));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_abfcc0();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.dxc.hlsl
index 55a337a..95ef5e0 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_ae5e39() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float4 v = float4((1.0f).xxx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_ae5e39();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.fxc.hlsl
index 55a337a..95ef5e0 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae5e39.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_ae5e39() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(int(1)));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float4 v = float4((1.0f).xxx, float(int(1)));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_ae5e39();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.dxc.hlsl
index 1489d42..7164062 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCube arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_ae92a2() {
-  TextureCube v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xxx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1u));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_ae92a2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.fxc.hlsl
index 1489d42..7164062 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ae92a2.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCube arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_ae92a2() {
-  TextureCube v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xxx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1u));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_ae92a2();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.dxc.hlsl
index 9dfe980..c5e0aed 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_b7c55c() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_b7c55c();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.fxc.hlsl
index 9dfe980..c5e0aed 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/b7c55c.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_b7c55c() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(int(1)));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(int(1)));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_b7c55c();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.dxc.hlsl
index af58a4f..379ff01 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 TextureCube<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_c32df7() {
-  TextureCube<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xxx, float(1.0f));
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1.0f));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_c32df7();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.fxc.hlsl
index af58a4f..379ff01 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c32df7.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 TextureCube<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_c32df7() {
-  TextureCube<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xxx, float(1.0f));
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1.0f));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_c32df7();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.dxc.hlsl
index 62eb6c1..0b93921 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_c6aca6() {
-  Texture2D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xx, float(1.0f));
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1.0f));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_c6aca6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.fxc.hlsl
index 62eb6c1..0b93921 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/c6aca6.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_c6aca6() {
-  Texture2D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xx, float(1.0f));
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1.0f));
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_c6aca6();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.dxc.hlsl
index 344c3b7..a3aa219 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_cdfe0f() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(1u), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_cdfe0f();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.fxc.hlsl
index 344c3b7..a3aa219 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/cdfe0f.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_cdfe0f() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(1u), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(1u), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_cdfe0f();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.dxc.hlsl
index 08fde6d..f4d00e6 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture3D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_dcbecb() {
-  Texture3D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xxx, float(1.0f), (int(1)).xxx);
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1.0f), (int(1)).xxx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_dcbecb();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.fxc.hlsl
index 08fde6d..f4d00e6 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/dcbecb.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture3D<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_dcbecb() {
-  Texture3D<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 res = v.SampleLevel(v_1, (1.0f).xxx, float(1.0f), (int(1)).xxx);
+  float4 res = arg_0.SampleLevel(arg_1, (1.0f).xxx, float(1.0f), (int(1)).xxx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_dcbecb();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.dxc.hlsl
index 058387b..2aac8f7 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_e6ce9e() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_e6ce9e();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.fxc.hlsl
index 058387b..2aac8f7 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/e6ce9e.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_e6ce9e() {
-  Texture2DArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_e6ce9e();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.dxc.hlsl
index 37bd94f..3a45661 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.dxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_f3b2c8() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(1u), (int(1)).xx);
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1u), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_f3b2c8();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.fxc.hlsl
index 37bd94f..3a45661 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/f3b2c8.wgsl.expected.ir.fxc.hlsl
@@ -13,9 +13,7 @@
 Texture2D arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_f3b2c8() {
-  Texture2D v = arg_0;
-  SamplerState v_1 = arg_1;
-  float res = v.SampleLevel(v_1, (1.0f).xx, float(1u), (int(1)).xx);
+  float res = arg_0.SampleLevel(arg_1, (1.0f).xx, float(1u), (int(1)).xx);
   return res;
 }
 
@@ -32,15 +30,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_f3b2c8();
-  VertexOutput v_2 = tint_symbol;
-  return v_2;
+  VertexOutput v = tint_symbol;
+  return v;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_3 = vertex_main_inner();
-  VertexOutput v_4 = v_3;
-  VertexOutput v_5 = v_3;
-  vertex_main_outputs v_6 = {v_5.prevent_dce, v_4.pos};
-  return v_6;
+  VertexOutput v_1 = vertex_main_inner();
+  VertexOutput v_2 = v_1;
+  VertexOutput v_3 = v_1;
+  vertex_main_outputs v_4 = {v_3.prevent_dce, v_2.pos};
+  return v_4;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.dxc.hlsl
index c7e9889..44a2a8d 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_faa6d7() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(1u));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_faa6d7();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.fxc.hlsl
index c7e9889..44a2a8d 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/faa6d7.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 Texture2DArray<float4> arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float4 textureSampleLevel_faa6d7() {
-  Texture2DArray<float4> v = arg_0;
-  SamplerState v_1 = arg_1;
-  float3 v_2 = float3((1.0f).xx, float(1u));
-  float4 res = v.SampleLevel(v_1, v_2, float(1.0f), (int(1)).xx);
+  float3 v = float3((1.0f).xx, float(1u));
+  float4 res = arg_0.SampleLevel(arg_1, v, float(1.0f), (int(1)).xx);
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_faa6d7();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.dxc.hlsl
index e172f03..38ece8b 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_ff11bc() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float4 v = float4((1.0f).xxx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_ff11bc();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.fxc.hlsl
index e172f03..38ece8b 100644
--- a/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureSampleLevel/ff11bc.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,8 @@
 TextureCubeArray arg_0 : register(t0, space1);
 SamplerState arg_1 : register(s1, space1);
 float textureSampleLevel_ff11bc() {
-  TextureCubeArray v = arg_0;
-  SamplerState v_1 = arg_1;
-  float4 v_2 = float4((1.0f).xxx, float(1u));
-  float res = v.SampleLevel(v_1, v_2, float(int(1)));
+  float4 v = float4((1.0f).xxx, float(1u));
+  float res = arg_0.SampleLevel(arg_1, v, float(int(1)));
   return res;
 }
 
@@ -33,15 +31,15 @@
   VertexOutput tint_symbol = (VertexOutput)0;
   tint_symbol.pos = (0.0f).xxxx;
   tint_symbol.prevent_dce = textureSampleLevel_ff11bc();
-  VertexOutput v_3 = tint_symbol;
-  return v_3;
+  VertexOutput v_1 = tint_symbol;
+  return v_1;
 }
 
 vertex_main_outputs vertex_main() {
-  VertexOutput v_4 = vertex_main_inner();
-  VertexOutput v_5 = v_4;
-  VertexOutput v_6 = v_4;
-  vertex_main_outputs v_7 = {v_6.prevent_dce, v_5.pos};
-  return v_7;
+  VertexOutput v_2 = vertex_main_inner();
+  VertexOutput v_3 = v_2;
+  VertexOutput v_4 = v_2;
+  vertex_main_outputs v_5 = {v_4.prevent_dce, v_3.pos};
+  return v_5;
 }
 
diff --git a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.dxc.hlsl
index 56c28d0..d77e838 100644
--- a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_00ca64() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.fxc.hlsl
index 56c28d0..d77e838 100644
--- a/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/00ca64.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_00ca64() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.dxc.hlsl
index b683c01..5af8bff 100644
--- a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_0148bd() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.fxc.hlsl
index b683c01..5af8bff 100644
--- a/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0148bd.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_0148bd() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.dxc.hlsl
index 1e2b440..af0cce3 100644
--- a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_042b06() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.fxc.hlsl
index 1e2b440..af0cce3 100644
--- a/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/042b06.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_042b06() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.dxc.hlsl
index 068dca5..126db25 100644
--- a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_053664() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.fxc.hlsl
index 068dca5..126db25 100644
--- a/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/053664.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_053664() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.dxc.hlsl
index 4d3edf3..de0c3dc 100644
--- a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_06e49c() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.fxc.hlsl
index 4d3edf3..de0c3dc 100644
--- a/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/06e49c.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_06e49c() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.dxc.hlsl
index 5bf7c71..41578c7 100644
--- a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_0a1a79() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.fxc.hlsl
index 5bf7c71..41578c7 100644
--- a/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0a1a79.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_0a1a79() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.dxc.hlsl
index ac3aec2..1dd3aa1 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_0ade9a() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.fxc.hlsl
index ac3aec2..1dd3aa1 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0ade9a.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_0ade9a() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.dxc.hlsl
index f63d937..f2efb63 100644
--- a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_0cc825() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.fxc.hlsl
index f63d937..f2efb63 100644
--- a/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0cc825.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_0cc825() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.dxc.hlsl
index 219824c..32a0250 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_0ff97a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.fxc.hlsl
index 219824c..32a0250 100644
--- a/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/0ff97a.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_0ff97a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.dxc.hlsl
index 2505a41..477d696 100644
--- a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_158cf0() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.fxc.hlsl
index 2505a41..477d696 100644
--- a/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/158cf0.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_158cf0() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.dxc.hlsl
index 73a656b..575735d 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1a6c0b() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.fxc.hlsl
index 73a656b..575735d 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1a6c0b.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1a6c0b() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.dxc.hlsl
index a75bbdb..a48bd8e 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1a7d35() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.fxc.hlsl
index a75bbdb..a48bd8e 100644
--- a/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1a7d35.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1a7d35() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.dxc.hlsl
index 0ccd1f8..d8d535a 100644
--- a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_1af236() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.fxc.hlsl
index 0ccd1f8..d8d535a 100644
--- a/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1af236.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_1af236() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.dxc.hlsl
index 76886b6..b4313b8 100644
--- a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1c02e7() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.fxc.hlsl
index 76886b6..b4313b8 100644
--- a/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1c02e7.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1c02e7() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.dxc.hlsl
index c425762..f612a84 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_1e79f0() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.fxc.hlsl
index c425762..f612a84 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1e79f0.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_1e79f0() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.dxc.hlsl
index 5146c07..9ecc873 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1e9fbd() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.fxc.hlsl
index 5146c07..9ecc873 100644
--- a/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1e9fbd.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1e9fbd() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.dxc.hlsl
index 785cb85..47777cf 100644
--- a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1f1ef8() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.fxc.hlsl
index 785cb85..47777cf 100644
--- a/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/1f1ef8.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_1f1ef8() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.dxc.hlsl
index 04cabe7..a774889 100644
--- a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_2046db() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.fxc.hlsl
index 04cabe7..a774889 100644
--- a/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2046db.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_2046db() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.dxc.hlsl
index 93a5836..6c58114 100644
--- a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_22d955() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.fxc.hlsl
index 93a5836..6c58114 100644
--- a/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/22d955.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_22d955() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.dxc.hlsl
index 4795967..f378f56 100644
--- a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_22f045() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.fxc.hlsl
index 4795967..f378f56 100644
--- a/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/22f045.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_22f045() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.dxc.hlsl
index 9f970b6..86fd955 100644
--- a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_2383fc() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.fxc.hlsl
index 9f970b6..86fd955 100644
--- a/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2383fc.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_2383fc() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.dxc.hlsl
index 8223d4f..7b3fd7d 100644
--- a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_258ab0() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.fxc.hlsl
index 8223d4f..7b3fd7d 100644
--- a/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/258ab0.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_258ab0() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.dxc.hlsl
index df0cdfb..ba13a80 100644
--- a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_27063a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.fxc.hlsl
index df0cdfb..ba13a80 100644
--- a/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/27063a.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_27063a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.dxc.hlsl
index ba9fc4b..312c5c5 100644
--- a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_272f5a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.fxc.hlsl
index ba9fc4b..312c5c5 100644
--- a/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/272f5a.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_272f5a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.dxc.hlsl
index 130f0c9..0749424 100644
--- a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_28a7ec() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.fxc.hlsl
index 130f0c9..0749424 100644
--- a/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/28a7ec.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_28a7ec() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.dxc.hlsl
index d30e0f4..ac642b9 100644
--- a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_2a60c9() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.fxc.hlsl
index d30e0f4..ac642b9 100644
--- a/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2a60c9.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_2a60c9() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.dxc.hlsl
index c84cc54..f249482 100644
--- a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_2addd6() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.fxc.hlsl
index c84cc54..f249482 100644
--- a/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2addd6.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_2addd6() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.dxc.hlsl
index 2b1533c..4b4aa35 100644
--- a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_2d2835() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.fxc.hlsl
index 2b1533c..4b4aa35 100644
--- a/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/2d2835.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_2d2835() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.dxc.hlsl
index f63796e..fea90f1 100644
--- a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_30b0b0() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.fxc.hlsl
index f63796e..fea90f1 100644
--- a/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/30b0b0.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_30b0b0() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.dxc.hlsl
index cb7143e..ea16768 100644
--- a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_312f27() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.fxc.hlsl
index cb7143e..ea16768 100644
--- a/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/312f27.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_312f27() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.dxc.hlsl
index 8115119..53f7cdf 100644
--- a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_319029() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.fxc.hlsl
index 8115119..53f7cdf 100644
--- a/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/319029.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_319029() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.dxc.hlsl
index 7cb03aa..03d2fea 100644
--- a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_32f368() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.fxc.hlsl
index 7cb03aa..03d2fea 100644
--- a/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/32f368.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_32f368() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.dxc.hlsl
index 83b020a..2402d08 100644
--- a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_330b7c() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.fxc.hlsl
index 83b020a..2402d08 100644
--- a/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/330b7c.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_330b7c() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.dxc.hlsl
index cd8ee6b..564a309 100644
--- a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_3310d3() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.fxc.hlsl
index cd8ee6b..564a309 100644
--- a/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3310d3.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_3310d3() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.dxc.hlsl
index 2a47679..e33b39f 100644
--- a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_33cec0() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.fxc.hlsl
index 2a47679..e33b39f 100644
--- a/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/33cec0.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_33cec0() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.dxc.hlsl
index 90050d7..7590f9c 100644
--- a/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_37eeef() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.fxc.hlsl
index 90050d7..7590f9c 100644
--- a/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/37eeef.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_37eeef() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.dxc.hlsl
index cc681d7..85e5d3f 100644
--- a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_37ffd4() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.fxc.hlsl
index cc681d7..85e5d3f 100644
--- a/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/37ffd4.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_37ffd4() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.dxc.hlsl
index 5b4fc4b..220e9f1 100644
--- a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_38e8d7() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.fxc.hlsl
index 5b4fc4b..220e9f1 100644
--- a/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/38e8d7.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_38e8d7() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.dxc.hlsl
index 28955de..7306edc 100644
--- a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_3a52ac() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.fxc.hlsl
index 28955de..7306edc 100644
--- a/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3a52ac.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_3a52ac() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.dxc.hlsl
index be45e60..6c06aeb 100644
--- a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_3bb7a1() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.fxc.hlsl
index be45e60..6c06aeb 100644
--- a/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3bb7a1.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_3bb7a1() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.dxc.hlsl
index fc85fdb..82f1f04 100644
--- a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_3e0dc4() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.fxc.hlsl
index fc85fdb..82f1f04 100644
--- a/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/3e0dc4.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_3e0dc4() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.dxc.hlsl
index 3a238d3..88a5690 100644
--- a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_43d1df() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.fxc.hlsl
index 3a238d3..88a5690 100644
--- a/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/43d1df.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_43d1df() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.dxc.hlsl
index 8f8f2e1..c9c4d7c 100644
--- a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_44daa7() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.fxc.hlsl
index 8f8f2e1..c9c4d7c 100644
--- a/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/44daa7.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_44daa7() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.dxc.hlsl
index 4dcdfde..df4e7fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_48cb56() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.fxc.hlsl
index 4dcdfde..df4e7fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/48cb56.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_48cb56() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.dxc.hlsl
index aa83a5c..8864a78 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_4c454f() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.fxc.hlsl
index aa83a5c..8864a78 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4c454f.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_4c454f() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.dxc.hlsl
index 699c939..83d97fe 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_4c76b7() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.fxc.hlsl
index 699c939..83d97fe 100644
--- a/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4c76b7.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_4c76b7() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.dxc.hlsl
index 59682da..0131291 100644
--- a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_4d359d() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.fxc.hlsl
index 59682da..0131291 100644
--- a/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4d359d.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_4d359d() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.dxc.hlsl
index 9ea5c76..34f25be 100644
--- a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_4e2b3a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.fxc.hlsl
index 9ea5c76..34f25be 100644
--- a/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4e2b3a.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_4e2b3a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.dxc.hlsl
index bae3e31..48d2967 100644
--- a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_4fc057() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.fxc.hlsl
index bae3e31..48d2967 100644
--- a/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/4fc057.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_4fc057() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.dxc.hlsl
index 8cbc42d..4e6944a 100644
--- a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5030f5() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.fxc.hlsl
index 8cbc42d..4e6944a 100644
--- a/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5030f5.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5030f5() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.dxc.hlsl
index 649a93a..a69110f 100644
--- a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_55f9dc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.fxc.hlsl
index 649a93a..a69110f 100644
--- a/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/55f9dc.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_55f9dc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.dxc.hlsl
index 2a14cd6..8962fd1 100644
--- a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5841f8() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.fxc.hlsl
index 2a14cd6..8962fd1 100644
--- a/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5841f8.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5841f8() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.dxc.hlsl
index 63a0e97..08d2752 100644
--- a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_59a0ab() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.fxc.hlsl
index 63a0e97..08d2752 100644
--- a/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/59a0ab.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_59a0ab() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.dxc.hlsl
index d534988..7119e64 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5a8b41() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.fxc.hlsl
index d534988..7119e64 100644
--- a/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5a8b41.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5a8b41() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.dxc.hlsl
index 8f48a82..c9a8654 100644
--- a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_5bc4f3() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.fxc.hlsl
index 8f48a82..c9a8654 100644
--- a/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5bc4f3.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_5bc4f3() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.dxc.hlsl
index 4ccd87b..66712c6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_5ddc61() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.fxc.hlsl
index 4ccd87b..66712c6 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5ddc61.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_5ddc61() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.dxc.hlsl
index 1d8dd2a..fc0618b 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5ee194() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.fxc.hlsl
index 1d8dd2a..fc0618b 100644
--- a/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5ee194.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5ee194() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.dxc.hlsl
index 51ef83d..48ff90c 100644
--- a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5f9a49() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.fxc.hlsl
index 51ef83d..48ff90c 100644
--- a/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/5f9a49.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_5f9a49() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.dxc.hlsl
index aeaec44..840a9ac 100644
--- a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_60975f() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.fxc.hlsl
index aeaec44..840a9ac 100644
--- a/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/60975f.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_60975f() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.dxc.hlsl
index d3f6146..cecedc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_614b58() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.fxc.hlsl
index d3f6146..cecedc6 100644
--- a/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/614b58.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_614b58() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.dxc.hlsl
index d2807e3..90cf5ad 100644
--- a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_658a74() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.fxc.hlsl
index d2807e3..90cf5ad 100644
--- a/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/658a74.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_658a74() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.dxc.hlsl
index cab8785..478b875 100644
--- a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_699a1b() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.fxc.hlsl
index cab8785..478b875 100644
--- a/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/699a1b.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_699a1b() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.dxc.hlsl
index 0be2005..a137fbc 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_6d1809() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.fxc.hlsl
index 0be2005..a137fbc 100644
--- a/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6d1809.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_6d1809() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.dxc.hlsl
index d2a60af..9166131 100644
--- a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_6da692() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.fxc.hlsl
index d2a60af..9166131 100644
--- a/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6da692.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_6da692() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.dxc.hlsl
index aa7d9f1..13980ad 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_6f0c92() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.fxc.hlsl
index aa7d9f1..13980ad 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6f0c92.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_6f0c92() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.dxc.hlsl
index e20fd69..6b8ec7d 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_6f8642() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.fxc.hlsl
index e20fd69..6b8ec7d 100644
--- a/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/6f8642.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_6f8642() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.dxc.hlsl
index 45edb83..85339d2 100644
--- a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_704e1f() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.fxc.hlsl
index 45edb83..85339d2 100644
--- a/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/704e1f.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_704e1f() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.dxc.hlsl
index 46735bb..8382b8f 100644
--- a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_706560() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.fxc.hlsl
index 46735bb..8382b8f 100644
--- a/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/706560.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_706560() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.dxc.hlsl
index ae1473a..8c55bff 100644
--- a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_72fa64() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.fxc.hlsl
index ae1473a..8c55bff 100644
--- a/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/72fa64.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_72fa64() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.dxc.hlsl
index 80e98d8..49caab7 100644
--- a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_73a735() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.fxc.hlsl
index 80e98d8..49caab7 100644
--- a/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/73a735.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_73a735() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.dxc.hlsl
index fd0d5b2..e26b51b 100644
--- a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_75bbd5() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.fxc.hlsl
index fd0d5b2..e26b51b 100644
--- a/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/75bbd5.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_75bbd5() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.dxc.hlsl
index c11ee31..c02dbea 100644
--- a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_76affd() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.fxc.hlsl
index c11ee31..c02dbea 100644
--- a/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/76affd.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_76affd() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.dxc.hlsl
index 1e30062..bd1ce89 100644
--- a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_779d14() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.fxc.hlsl
index 1e30062..bd1ce89 100644
--- a/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/779d14.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_779d14() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.dxc.hlsl
index 1c6f19c..bb8a6fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_7bb211() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.fxc.hlsl
index 1c6f19c..bb8a6fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/7bb211.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_7bb211() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.dxc.hlsl
index 5b6005c..dac255c 100644
--- a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_7cec8d() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.fxc.hlsl
index 5b6005c..dac255c 100644
--- a/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/7cec8d.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_7cec8d() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.dxc.hlsl
index 43f0566..0c3f3ec 100644
--- a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_7dd042() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.fxc.hlsl
index 43f0566..0c3f3ec 100644
--- a/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/7dd042.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_7dd042() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.dxc.hlsl
index c54615a..923dd1f 100644
--- a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_81ae31() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.fxc.hlsl
index c54615a..923dd1f 100644
--- a/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/81ae31.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_81ae31() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.dxc.hlsl
index fb8fde3..7ec6890 100644
--- a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_820272() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.fxc.hlsl
index fb8fde3..7ec6890 100644
--- a/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/820272.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_820272() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.dxc.hlsl
index 61ccfa3..5edee13 100644
--- a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_84d435() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.fxc.hlsl
index 61ccfa3..5edee13 100644
--- a/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/84d435.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_84d435() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.dxc.hlsl
index 519c422..d2e3b65 100644
--- a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_84f4f4() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.fxc.hlsl
index 519c422..d2e3b65 100644
--- a/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/84f4f4.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_84f4f4() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.dxc.hlsl
index 1804aae..432f0f9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_8815b1() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.fxc.hlsl
index 1804aae..432f0f9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8815b1.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_8815b1() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.dxc.hlsl
index 5fb4c70..b65ee4b 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8a16b0() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.fxc.hlsl
index 5fb4c70..b65ee4b 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8a16b0.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8a16b0() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.dxc.hlsl
index ff93691..dc0cf25 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_8a85b9() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.fxc.hlsl
index ff93691..dc0cf25 100644
--- a/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8a85b9.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_8a85b9() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.dxc.hlsl
index f0eac6c..a347921 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_8ae0bc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.fxc.hlsl
index f0eac6c..a347921 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8ae0bc.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_8ae0bc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.dxc.hlsl
index 63cbc06..68b9fca 100644
--- a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_8bb287() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.fxc.hlsl
index 63cbc06..68b9fca 100644
--- a/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8bb287.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_8bb287() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.dxc.hlsl
index 01dae86..00108a9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8cd841() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.fxc.hlsl
index 01dae86..00108a9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8cd841.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8cd841() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.dxc.hlsl
index ae462a6..cc8c2b9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8e0479() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.fxc.hlsl
index ae462a6..cc8c2b9 100644
--- a/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8e0479.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8e0479() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.dxc.hlsl
index 4012184..6b82979 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_8ebdc9() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.fxc.hlsl
index 4012184..6b82979 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8ebdc9.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_8ebdc9() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.dxc.hlsl
index 35a0b87..0b5778f 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8ff674() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.fxc.hlsl
index 35a0b87..0b5778f 100644
--- a/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/8ff674.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_8ff674() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.dxc.hlsl
index 3153058..59a2c33 100644
--- a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_90a553() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.fxc.hlsl
index 3153058..59a2c33 100644
--- a/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/90a553.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_90a553() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.dxc.hlsl
index f68e900..7075ca1 100644
--- a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_9938b7() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.fxc.hlsl
index f68e900..7075ca1 100644
--- a/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9938b7.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_9938b7() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.dxc.hlsl
index 764d06c..2235555 100644
--- a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_9cea9e() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.fxc.hlsl
index 764d06c..2235555 100644
--- a/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9cea9e.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_9cea9e() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.dxc.hlsl
index 8991b72..d478b25 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_9d8668() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.fxc.hlsl
index 8991b72..d478b25 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9d8668.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_9d8668() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.dxc.hlsl
index 94b672a..5dda208 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_9d9cd5() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.fxc.hlsl
index 94b672a..5dda208 100644
--- a/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9d9cd5.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_9d9cd5() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.dxc.hlsl
index 53ee2f9..612e4c4 100644
--- a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_9f7cea() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.fxc.hlsl
index 53ee2f9..612e4c4 100644
--- a/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/9f7cea.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_9f7cea() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.dxc.hlsl
index 266831d..3f048789d 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_a0022f() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.fxc.hlsl
index 266831d..3f048789d 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a0022f.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_a0022f() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.dxc.hlsl
index 1f33ab3..f0551d1 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_a0f96e() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.fxc.hlsl
index 1f33ab3..f0551d1 100644
--- a/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a0f96e.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_a0f96e() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.dxc.hlsl
index 54cb7c7..fd25558 100644
--- a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_a1352c() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.fxc.hlsl
index 54cb7c7..fd25558 100644
--- a/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a1352c.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_a1352c() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.dxc.hlsl
index f774b00..c8e94de 100644
--- a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_a6a986() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.fxc.hlsl
index f774b00..c8e94de 100644
--- a/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a6a986.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_a6a986() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.dxc.hlsl
index 2237572..e58d0ae 100644
--- a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_a702b6() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.fxc.hlsl
index 2237572..e58d0ae 100644
--- a/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a702b6.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_a702b6() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.dxc.hlsl
index 482ed1c..4aa6422 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_a9426c() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.fxc.hlsl
index 482ed1c..4aa6422 100644
--- a/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/a9426c.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_a9426c() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.dxc.hlsl
index 3ae3213..99eff10 100644
--- a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_abdd21() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.fxc.hlsl
index 3ae3213..99eff10 100644
--- a/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/abdd21.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_abdd21() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.dxc.hlsl
index be053f0..a32d579 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_ac0a55() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.fxc.hlsl
index be053f0..a32d579 100644
--- a/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ac0a55.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_ac0a55() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.dxc.hlsl
index fe2a23d..31c9f1d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_ae6a2a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.fxc.hlsl
index fe2a23d..31c9f1d 100644
--- a/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ae6a2a.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_ae6a2a() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.dxc.hlsl
index 0d30410..4019143 100644
--- a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_aedea3() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.fxc.hlsl
index 0d30410..4019143 100644
--- a/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/aedea3.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_aedea3() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.dxc.hlsl
index 798adc2..9c90b77 100644
--- a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_b16110() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.fxc.hlsl
index 798adc2..9c90b77 100644
--- a/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b16110.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_b16110() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.dxc.hlsl
index e8cf312..e5471ab 100644
--- a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_b286b4() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.fxc.hlsl
index e8cf312..e5471ab 100644
--- a/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b286b4.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_b286b4() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.dxc.hlsl
index 29ec2d1..31b73ee 100644
--- a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_b42fd3() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.fxc.hlsl
index 29ec2d1..31b73ee 100644
--- a/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b42fd3.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_b42fd3() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.dxc.hlsl
index f1dbfb2..edd395c 100644
--- a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_b71c13() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.fxc.hlsl
index f1dbfb2..edd395c 100644
--- a/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b71c13.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_b71c13() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.dxc.hlsl
index aabccb3..ffe0d9a 100644
--- a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_b89ffb() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.fxc.hlsl
index aabccb3..ffe0d9a 100644
--- a/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b89ffb.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_b89ffb() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.dxc.hlsl
index e57c28d..69262a2 100644
--- a/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_b91b86() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.fxc.hlsl
index e57c28d..69262a2 100644
--- a/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b91b86.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_b91b86() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.dxc.hlsl
index 91a3849..8ab27f3 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_b9d863() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.fxc.hlsl
index 91a3849..8ab27f3 100644
--- a/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/b9d863.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_b9d863() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.dxc.hlsl
index ab95ece..69f215c 100644
--- a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_bc1423() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.fxc.hlsl
index ab95ece..69f215c 100644
--- a/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/bc1423.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_bc1423() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.dxc.hlsl
index 4ef0bf4..2b836d3 100644
--- a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_bd6602() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.fxc.hlsl
index 4ef0bf4..2b836d3 100644
--- a/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/bd6602.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_bd6602() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.dxc.hlsl
index 36c43b6..19522b8 100644
--- a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_c06463() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.fxc.hlsl
index 36c43b6..19522b8 100644
--- a/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c06463.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_c06463() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.dxc.hlsl
index dc4c471..9de183c 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_c1f760() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.fxc.hlsl
index dc4c471..9de183c 100644
--- a/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c1f760.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_c1f760() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.dxc.hlsl
index a210493..75d5cea 100644
--- a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_c2ca46() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.fxc.hlsl
index a210493..75d5cea 100644
--- a/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c2ca46.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_c2ca46() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.dxc.hlsl
index 224ae09..65deb51 100644
--- a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_c32905() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.fxc.hlsl
index 224ae09..65deb51 100644
--- a/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c32905.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_c32905() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.dxc.hlsl
index 0996a6a..3954c75 100644
--- a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_c35268() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.fxc.hlsl
index 0996a6a..3954c75 100644
--- a/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c35268.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_c35268() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.dxc.hlsl
index 4c83728..0398cfc 100644
--- a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_c63f05() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.fxc.hlsl
index 4c83728..0398cfc 100644
--- a/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c63f05.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_c63f05() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.dxc.hlsl
index 889be36..6e37f07 100644
--- a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_c863be() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.fxc.hlsl
index 889be36..6e37f07 100644
--- a/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/c863be.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_c863be() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.dxc.hlsl
index a5a4d23..7d1a622 100644
--- a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_ceb832() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.fxc.hlsl
index a5a4d23..7d1a622 100644
--- a/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ceb832.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_ceb832() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.dxc.hlsl
index 99e8601..9d2d4df 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_d0fadc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.fxc.hlsl
index 99e8601..9d2d4df 100644
--- a/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/d0fadc.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_d0fadc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.dxc.hlsl
index 2d28fde..ab3cb68 100644
--- a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_d55e65() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.fxc.hlsl
index 2d28fde..ab3cb68 100644
--- a/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/d55e65.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_d55e65() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.dxc.hlsl
index b4eaf16..1556425 100644
--- a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_d86d33() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.fxc.hlsl
index b4eaf16..1556425 100644
--- a/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/d86d33.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_d86d33() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.dxc.hlsl
index 4319a91..e63cf70 100644
--- a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_db5128() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.fxc.hlsl
index 4319a91..e63cf70 100644
--- a/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/db5128.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_db5128() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.dxc.hlsl
index abc06de..4def303 100644
--- a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_dce0e2() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.fxc.hlsl
index abc06de..4def303 100644
--- a/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dce0e2.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_dce0e2() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.dxc.hlsl
index 2b58f8c..dbeb847 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_dd8b29() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.fxc.hlsl
index 2b58f8c..dbeb847 100644
--- a/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dd8b29.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_dd8b29() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.dxc.hlsl
index 9a2a16d..82cc51d 100644
--- a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_dde364() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.fxc.hlsl
index 9a2a16d..82cc51d 100644
--- a/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dde364.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_dde364() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.dxc.hlsl
index 40840af..9c19a36 100644
--- a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_df2ca4() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.fxc.hlsl
index 40840af..9c19a36 100644
--- a/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/df2ca4.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_df2ca4() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.dxc.hlsl
index e164f97..bfb9ff8 100644
--- a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_dfa9a1() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.fxc.hlsl
index e164f97..bfb9ff8 100644
--- a/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dfa9a1.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_dfa9a1() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.dxc.hlsl
index 0d5c646..4b6b88c 100644
--- a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_dffb13() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.fxc.hlsl
index 0d5c646..4b6b88c 100644
--- a/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/dffb13.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_dffb13() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.dxc.hlsl
index 68c57f0..9eb39fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_e1784d() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.fxc.hlsl
index 68c57f0..9eb39fb 100644
--- a/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/e1784d.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_e1784d() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.dxc.hlsl
index 6ac5250..2277774 100644
--- a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_e38281() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.fxc.hlsl
index 6ac5250..2277774 100644
--- a/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/e38281.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_e38281() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.dxc.hlsl
index fdb8ada..c09e50b 100644
--- a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_e72bdc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.fxc.hlsl
index fdb8ada..c09e50b 100644
--- a/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/e72bdc.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_e72bdc() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.dxc.hlsl
index 0ac0c2f..b29e271 100644
--- a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_ea30d2() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.fxc.hlsl
index 0ac0c2f..b29e271 100644
--- a/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/ea30d2.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_ea30d2() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.dxc.hlsl
index 986c471..6d6a23f 100644
--- a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_f05928() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.fxc.hlsl
index 986c471..6d6a23f 100644
--- a/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f05928.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_f05928() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.dxc.hlsl
index 7c842af..6fcb192 100644
--- a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_f6f392() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.fxc.hlsl
index 7c842af..6fcb192 100644
--- a/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f6f392.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_f6f392() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.dxc.hlsl
index 5c3093d..4a399c3 100644
--- a/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_f7b0ab() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.fxc.hlsl
index 5c3093d..4a399c3 100644
--- a/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f7b0ab.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<float4> arg_0 : register(u0, space1);
 void textureStore_f7b0ab() {
-  RWTexture2DArray<float4> v = arg_0;
-  v[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
+  arg_0[uint3((1u).xx, uint(1u))] = (1.0f).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.dxc.hlsl
index 5395104..2a2eb2c 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_f8aaf9() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.fxc.hlsl
index 5395104..2a2eb2c 100644
--- a/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f8aaf9.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_f8aaf9() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.dxc.hlsl
index e8f35ec..946a7f4 100644
--- a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_f9be83() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.fxc.hlsl
index e8f35ec..946a7f4 100644
--- a/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/f9be83.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_f9be83() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.dxc.hlsl
index 530fc4c..cf20671 100644
--- a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_fbf53f() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.fxc.hlsl
index 530fc4c..cf20671 100644
--- a/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/fbf53f.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<int4> arg_0 : register(u0, space1);
 void textureStore_fbf53f() {
-  RWTexture2DArray<int4> v = arg_0;
-  v[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
+  arg_0[int3((int(1)).xx, int(int(1)))] = (int(1)).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.dxc.hlsl
index 11bdfae..9e7099e 100644
--- a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_fc916e() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.fxc.hlsl
index 11bdfae..9e7099e 100644
--- a/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/fc916e.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_fc916e() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
+  arg_0[uint3((1u).xx, uint(int(1)))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.dxc.hlsl
index d05953c..f218b34 100644
--- a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.dxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_fd350c() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
diff --git a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.fxc.hlsl
index d05953c..f218b34 100644
--- a/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureStore/fd350c.wgsl.expected.ir.fxc.hlsl
@@ -1,8 +1,7 @@
 
 RWTexture2DArray<uint4> arg_0 : register(u0, space1);
 void textureStore_fd350c() {
-  RWTexture2DArray<uint4> v = arg_0;
-  v[int3((int(1)).xx, int(1u))] = (1u).xxxx;
+  arg_0[int3((int(1)).xx, int(1u))] = (1u).xxxx;
 }
 
 void fragment_main() {
